blob: a6ce50bc6858983ffbeebe4be019a6da1128f8ef [file] [log] [blame]
2014-12-31 Iain Sandoe <>
* parser.c (cp_parser_primary_expression): If parsing an
objective-c++ message expression fails, see if a lambda is present.
(cp_parser_objc_message_receiver): Don't assume that, if a message
receiver expression fails, it is a hard error.
2014-12-25 Jason Merrill <>
* pt.c (check_default_tmpl_args): Uses the parameter source
location in the diagnostic.
(convert_template_argument): Just return if parm is error_mark_node.
PR c++/63522
* parser.c (cp_parser_type_parameter): Call
check_for_bare_parameter_packs on default argument.
2014-12-24 Paolo Carlini <>
PR c++/63985
* parser.c (cp_parser_init_declarator): Add location_t* parameter.
(cp_parser_simple_declaration): Provide proper diagnostic for
multiple declarations and initializers in range-based for loops.
(cp_parser_single_declaration): Adjust call.
2014-12-20 Jason Merrill <>
PR c++/64359
* pt.c (iterative_hash_template_arg): Hash alias specializations
differently from their TYPE_CANONICAL.
(alias_template_specialization_p): Optimize.
(template_args_equal): Optimize alias handling.
(dependent_alias_template_spec_p): Only check innermost args.
2014-12-19 Kai Tietz <>
PR c++/61198
* pt.c (most_general_template): Don't break for template-alias.
2014-12-18 Jason Merrill <>
PR c++/64105
* parser.c (cp_parser_simple_type_specifier): Make auto parameter
before -std=c++14 an error.
PR c++/64352
* pt.c (tsubst_copy_and_build): Pass complain to mark_used.
PR c++/64251
* decl2.c (mark_used): Don't mark if in_template_function.
2014-12-18 Paolo Carlini <>
PR c++/60955
* pt.c (struct warning_sentinel): Move it...
* cp-tree.h: ... here.
* semantics.c (force_paren_expr): Use it.
2014-12-17 Jason Merrill <>
PR c++/64333
* constexpr.c (cxx_bind_parameters_in_call): non_constant_args parm.
(cxx_eval_call_expression): Don't cache calls with non-constant args.
(cxx_eval_constant_expression) [COMPOUND_EXPR]: Pass true for lval.
(cxx_eval_unary_expression, cxx_eval_binary_expression)
(cxx_eval_conditional_expression): Pass false for lval.
* constexpr.c: Change "addr" parm names to "lval".
* constexpr.c: Tweak comments and formatting.
2014-12-16 Paolo Carlini <>
PR c++/58650
* parser.c (cp_parser_member_declaration): Fix error recovery for
initialized non-static data member declared friend.
2014-12-15 Jan Hubicka <>
* decl2.c (decl_needed_p): When not optimizing, do not consider external
decls as needed.
2014-12-15 Jason Merrill <>
PR c++/64297
* typeck.c (apply_memfn_quals): Correct wrong TYPE_CANONICAL.
N3778: Sized Deallocation
* call.c (non_placement_deallocation_fn_p): A global sized
operator delete is not a usual deallocation function until C++14.
(build_op_delete_call): Choose the global sized op delete if we
know the size.
* cp-tree.h: Declare non_placement_deallocation_fn_p.
(enum cp_tree_index): Remove CPTI_GLOBAL_DELETE_FNDECL.
(global_delete_fndecl): Remove.
* decl.c (cxx_init_decl_processing): Also declare sized op deletes.
(grok_op_properties): Warn about sized dealloc without the flag.
* init.c (build_builtin_delete_call): Remove.
(build_vec_delete_1, build_delete): Don't call it.
* decl2.c (maybe_warn_sized_delete): New.
(cp_write_global_declarations): Call it.
2014-12-15 Paolo Carlini <>
PR c++/58882
* decl.c (check_array_designated_initializer): Diagnose gracefully
C99 designators which aren't integral constant-expressions; allow
constexpr user-defined type conversion operators.
2014-12-12 Paolo Carlini <>
PR c++/59628
* semantics.c (finish_omp_reduction_clause): Early return true
2014-12-12 Jason Merrill <>
* pt.c (do_auto_deduction): In direct-init context, { x } deduces
from x.
* cp-tree.h (NAMESPACE_ABI_TAG): New.
* name-lookup.c (handle_namespace_attrs): Set it.
* class.c (check_tag): Split out from find_abi_tags_r.
(find_abi_tags_r): Also check namespace tags.
(mark_type_abi_tags): Also mark namespace tags.
2014-12-12 Kai Tietz <>
PR c++/63996
* constexpr.c (cxx_eval_loop_expr): Don't loop
endless on none-constant expression.
2014-12-12 Jason Merrill <>
PR c++/61402
* lambda.c (add_capture): Don't pass a dependent type to
2014-12-11 Jason Merrill <>
Remove N3639 "array of runtime length" from -std=c++14.
* decl.c (compute_array_index_type): VLAs are not part of C++14.
(create_array_type_for_decl, grokdeclarator): Likewise.
* lambda.c (add_capture): Likewise.
* pt.c (tsubst): Likewise.
* rtti.c (get_tinfo_decl): Likewise.
* semantics.c (finish_decltype_type): Likewise.
* typeck.c (cxx_sizeof_or_alignof_type): Likewise.
(cp_build_addr_expr_1): Likewise.
* init.c (build_vec_init): Don't throw bad_array_length.
PR c++/64248
* parser.c (cp_parser_unqualified_id): Handle __func__ here.
(cp_parser_primary_expression): Not here.
PR c++/57510
* typeck2.c (split_nonconstant_init_1): Handle arrays here.
(store_init_value): Not here.
(split_nonconstant_init): Look through TARGET_EXPR. No longer static.
* cp-tree.h: Declare split_nonconstant_init.
* call.c (set_up_extended_ref_temp): Use split_nonconstant_init.
2014-12-11 Paolo Carlini <>
* typeck.c (maybe_warn_about_useless_cast): Remove unnecessary
2014-12-10 Kai Tietz <>
PR c++/64127
* parser.c (cp_parser_diagnose_invalid_type_name): Check id
for being an identifier before accessing it.
PR c++/64100
* typeck.c (lookup_destructor): Handle incomplete type.
2014-12-09 Jason Merrill <>
PR c++/64129
* decl.c (grokdeclarator): Recover from variable template
specialization declared as function.
PR c++/64222
* parser.c (cp_parser_unqualified_id): Don't declare fname while
parsing function parms.
2014-12-03 Jason Merrill <>
PR c++/64029
* decl.c (grok_reference_init): Complete array type.
PR c++/64080
* constexpr.c (cxx_eval_store_expression): Handle non-decl store
2014-12-03 Paolo Carlini <>
PR c++/63558
* decl.c (identify_goto): Return a bool if diagnostic is emitted.
(check_previous_goto_1): Consistently emit permerror + inform.
(check_goto): Likewise.
2014-12-03 Richard Biener <>
* constexpr.c (cxx_eval_builtin_function_call): Use
2014-12-02 Marek Polacek <>
* constexpr.c (cxx_eval_check_shift_p): New function.
(cxx_eval_binary_expression): Call it. Set NON_CONSTANT_P if it
returns true.
2014-12-01 Paolo Carlini <>
PR c++/60859
* decl.c (reshape_init_r): Do not reject value-initialization of
scalar array element.
2014-12-01 Marek Polacek <>
PR sanitizer/63956
* constexpr.c: Include ubsan.h.
(cxx_eval_call_expression): Bail out for IFN_UBSAN_{NULL,BOUNDS}
internal functions and for ubsan builtins.
* error.c: Include internal-fn.h.
(dump_expr): Add printing of internal functions.
2014-12-01 Marek Polacek <>
* constexpr.c (literal_type_p): Return true for void type in C++14.
2014-12-01 Paolo Carlini <>
PR c++/60845
* typeck.c (finish_class_member_access_expr): Use %q#T instead of
%qD in error message.
2014-11-29 Jakub Jelinek <>
* cp-gimplify.c (cxx_omp_clause_apply_fn): Remove NULL last argument
from create_tmp_var calls.
2014-11-28 Marek Polacek <>
PR c/63862
* typeck.c (cp_build_binary_op) <RSHIFT_EXPR, LSHIFT_EXPR>: Don't
convert the right operand to integer type.
2014-11-27 Kai Tietz <>
PR c++/63904
* constexpr.c (cxx_eval_vec_init_1): Avoid
type-overflow issue.
2014-11-26 Jason Merrill <>
Allow partial specialization of variable templates.
* cp-tree.h (TINFO_USED_TEMPLATE_ID): New.
* decl.c (duplicate_decls): Copy it.
* error.c (dump_decl) [TEMPLATE_ID_EXPR]: Handle variables.
* parser.c (cp_parser_decltype_expr): Do call finish_id_expression
on template-ids.
* pt.c (register_specialization): Remember variable template insts.
(instantiate_template_1): Find the matching partial specialization.
(check_explicit_specialization): Allow variable partial specialization.
(process_partial_specialization): Likewise.
(push_template_decl_real): Likewise.
(more_specialized_partial_spec): Rename from more_specialized_class.
(most_specialized_partial_spec): Rename from most_specialized_class.
(get_partial_spec_bindings): Rename from get_class_bindings.
2014-11-26 Paolo Carlini <>
PR c++/63757
* call.c (standard_conversion): Do not require expr to be non-null
when NULLPTR_TYPE_P (from) is true.
2014-11-26 Jason Merrill <>
* constexpr.c (cxx_eval_constant_expression) [SAVE_EXPR]: Avoid
multiple evaluation.
* constexpr.c (cxx_eval_call_expression): Don't talk about
flowing off the end if we're already non-constant.
2014-11-26 Ville Voutilainen <>
Diagnose string constant conversion to char* in c++11 and above
as forbidden, not deprecated.
* typeck.c (string_conv_p): Do a pedwarn in c++11 and above,
change the diagnostic for the Wwrite-strings case for c++11 and above.
2014-11-24 Jason Merrill <>
* pt.c (lookup_template_variable): Always unknown_type_node.
2014-11-25 Paolo Carlini <>
PR c++/63786
* parser.c (cp_parser_label_for_labeled_statement): Check the case
with check_for_bare_parameter_packs.
2014-11-24 Jonathan Wakely <>
Paolo Carlini <>
PR c++/63203
* decl.c (initialize_local_var): Add -Winit-self warning for
references initialized with themselves.
2014-11-24 Jason Merrill <>
PR c++/63942
* mangle.c (mangle_decl): If we aren't going to create a symbol
alias, don't build the alias DECL either.
2014-11-24 Paolo Carlini <>
PR c++/63905
* cp-tree.h (lang_decl_fn): Remove constructor_attr, destructor_attr.
2014-11-21 Jason Merrill <>
PR c++/63657
PR c++/38958
* call.c (set_up_extended_ref_temp): Set TREE_USED on the reference
if the temporary has a non-trivial destructor.
* decl.c (poplevel): Don't look through references.
PR c++/63942
* name-lookup.c (supplement_binding_1): Override a mangling alias.
* mangle.c (maybe_remove_implicit_alias): New.
(mangle_decl): Always avoid creating conflicting alias.
* cp-tree.h: Adjust.
PR c++/63849
* mangle.c (decl_mangling_context): Use template_type_parameter_p.
PR c++/63588
* pt.c (uses_template_parms): Handle null argument.
2014-11-21 Jakub Jelinek <>
PR target/63764
* typeck.c (cp_build_array_ref): Adjust
convert_vector_to_pointer_for_subscript caller. If it returns true,
call non_lvalue_loc on the result.
2014-11-20 Jason Merrill <>
PR c++/63658
* pt.c (convert_nontype_argument): Call convert_from_reference.
(check_instantiated_arg): Don't be confused by reference refs.
(unify): Look through reference refs on the arg, too.
* mangle.c (write_template_arg): Look through reference refs.
* error.c (dump_expr): Avoid printing (*&i) for references.
2014-11-20 Ville Voutilainen <>
PR c++/63959
* tree.c (trivially_copyable_p): Check for CP_TYPE_VOLATILE_P.
2014-11-20 Trevor Saunders <>
* cp-objcp-common.c: Use hash_table instead of htab.
2014-11-19 Jason Merrill <>
PR c++/56041
* cp-tree.h (struct processing_template_decl_sentinel): New.
* pt.c (instantiate_non_dependent_expr_internal): Split out from...
(instantiate_non_dependent_expr_sfinae): Here.
(convert_nontype_argument): Use them.
* constexpr.c (fold_non_dependent_expr): Use them.
PR c++/63885
* constexpr.c (cxx_eval_constant_expression) [PARM_DECL]: Don't
complain yet about a reference.
[TARGET_EXPR]: Handle TARGET_EXPR with addr == true.
[ADDR_EXPR]: Make sure we don't take the address of a CONSTRUCTOR.
(cxx_bind_parameters_in_call): In the new scheme addr is always false.
* typeck.c (build_address): Don't take the address of a CONSTRUCTOR.
PR c++/57979
* init.c (decl_really_constant_value): Rename from
(scalar_constant_value): Similar but limited to scalar results.
(decl_constant_value_safe): Remove.
(constant_value_1): Respect return_aggregate_cst_ok_p.
* typeck.c (decay_conversion): Use scalar_constant_value.
* call.c (convert_like_real): Likewise.
* cvt.c (ocp_convert): No need to check CLASS_TYPE_P.
* typeck.c (decay_conversion): Or ARRAY_TYPE.
* constexpr.c (struct constexpr_ctx): Add strict field.
(cxx_eval_constant_expression) [VAR_DECL]: Use it to select between
decl_constant_value and decl_really_constant_value.
(cxx_eval_outermost_constant_expr): Add strict parm.
(maybe_constant_init): Not strict.
(potential_constant_expression_1): Add strict parm.
Shorten most internal calls with RECUR macro.
* cp-tree.h, pt.c, semantics.c: Adjust.
2014-11-19 Jason Merrill <>
PR c++/63928
* constexpr.c (cxx_eval_store_expression): Return init, not *valp.
2014-11-19 Paolo Carlini <>
PR c++/55425
* constexpr.c (constexpr_fn_retval): Accept __func__, __FUNCTION__,
2014-11-18 Jason Merrill <>
PR c++/63924
* constexpr.c (cxx_eval_constant_expression) [PARM_DECL]: A load
from a variable of empty class type is constant.
* constexpr.c (cxx_eval_statement_list): Handle statement-expressions.
(potential_constant_expression_1): Handle STMT_EXPR.
* constexpr.c (cxx_eval_constant_expression): Give jump_target a
default argument.
(lots): Omit NULL jump_target arguments.
* constexpr.c (struct constexpr_ctx): Add quiet field.
(cxx_eval_outermost_constant_expr, is_sub_constant_expr): Set it.
(lots): Replace allow_non_constant parameter with ctx->quiet.
PR c++/63940
* constexpr.c (cxx_eval_binary_expression): Don't assume the
expression was already folded.
(cxx_eval_unary_expression): Likewise.
2014-11-18 Marc Glisse <>
PR libstdc++/43622
* rtti.c (emit_support_tinfos): Handle __float128.
2014-11-18 Jason Merrill <>
PR c++/63925
* constexpr.c (cxx_eval_increment_expression): Use POINTER_PLUS_EXPR.
PR c++/63934
* constexpr.c (cxx_eval_call_expression): Check DECL_CONSTRUCTOR_P
rather than VOID_TYPE_P.
* pt.c (instantiate_template_1): Use tsubst_aggr_type for context.
PR c++/58102
* typeck2.c (store_init_value): Set it.
* constexpr.c (cxx_eval_outermost_constant_expr): Check it.
2014-11-17 Jason Merrill <>
PR c++/33911
* call.c (build_call_a): Don't warn_deprecated_use here.
(build_over_call): Or here.
* decl2.c (mark_used): Do it here.
(is_late_template_attribute): Attribute deprecated is not deferred.
(cplus_decl_attributes): Propagate TREE_DEPRECATED out to the template.
* parser.c (cp_parser_template_name): Warn about deprecated template.
(cp_parser_template_argument): Likewise.
PR c++/50473
* decl.c (cp_finish_decl): Don't try to process a non-dependent
constant initializer for a reference.
* pt.c (value_dependent_expression_p): A reference is always
* call.c (extend_ref_init_temps_1): Also clear TREE_SIDE_EFFECTS
on any NOP_EXPRs.
Handle C++14 constexpr flow control.
* constexpr.c (cxx_eval_loop_expr, cxx_eval_switch_expr): New.
(cxx_eval_statement_list): New.
(cxx_eval_constant_expression): Handle LABEL_EXPR,
semantics of RETURN_EXPR.
(many functions): Add jump_target parameter.
(returns, breaks, continues, switches, label_matches): New.
* cp-gimplify.c (begin_bc_block): Set them.
* cp-gimplify.c (genericize_cp_loop): Use LOOP_EXPR.
(genericize_for_stmt): Handle null statement-list.
* constexpr.c (use_new_call): Always use new call handling.
C++14 constexpr support (minus loops and multiple returns)
* constexpr.c (use_new_call): New macro.
(build_data_member_initialization): Ignore non-mem-inits.
(check_constexpr_bind_expr_vars): Remove C++14 checks.
(constexpr_fn_retval): Likewise.
(check_constexpr_ctor_body): Do nothing in C++14.
(massage_constexpr_body): In C++14 only collect mem-inits.
(get_function_named_in_call): Handle null CALL_EXPR_FN.
(cxx_bind_parameters_in_call): Build bindings in same order as
parameters. Don't treat iniviref parms specially in new call mode.
(cxx_eval_call_expression): If use_new_call, do constexpr expansion
based on DECL_SAVED_TREE rather than the massaged constexpr body.
Set up ctx->object from AGGR_INIT_EXPR_SLOT if we don't have one.
(is_sub_constant_expr): Don't mess with ctx.ctor here.
(cxx_eval_component_reference): A null element means we're mid-
(cxx_eval_store_expression, cxx_eval_increment_expression): New.
(cxx_eval_constant_expression): Handle RESULT_DECL, DECL_EXPR,
POSTDECREMENT_EXPR. Don't look into DECL_INITIAL of variables in
constexpr functions. In new-call mode find parms in the values table.
(potential_constant_expression_1): Handle null CALL_EXPR_FN.
(cxx_eval_vec_init_1): Call build_aggr_init_expr.
(cxx_eval_indirect_ref): Don't return a CONSTRUCTOR when the
caller wants an lvalue.
(cxx_eval_outermost_constant_expr): Pull object out of AGGR_INIT_EXPR.
(maybe_constant_init): Look through INIT_EXPR.
(ensure_literal_type_for_constexpr_object): Set
* cp-tree.h (struct language_function): Add invalid_constexpr bitfield.
* decl.c (start_decl): Set cp_function_chain->invalid_constexpr.
(check_for_uninitialized_const_var): Likewise.
(maybe_save_function_definition): Check it.
* parser.c (cp_parser_jump_statement): Set
(cp_parser_asm_definition): Likewise.
PR c++/52282
* decl.c (build_ptrmemfunc_type): Don't build a different
RECORD_TYPE for a qualified PMF.
* cp-tree.h (TYPE_PTRMEMFUNC_FN_TYPE): Merge cv-quals.
* decl2.c (cplus_decl_attributes): Use TYPE_PTRMEMFUNC_FN_TYPE_RAW.
* tree.c (cp_walk_subtrees): Likewise.
(cp_build_qualified_type_real): Remove special PMF handling.
2014-11-15 Jason Merrill <>
* parser.c (cp_parser_omp_declare_reduction_exprs): A block is not
an expression.
* constexpr.c (cxx_eval_builtin_function_call): Use
* constexpr.c (cx_check_missing_mem_inits): Clarify error message.
2014-11-14 Paolo Carlini <>
* semantics.c (end_maybe_infinite_loop): Use fold_non_dependent_expr.
* parser.c (cp_parser_omp_clause_collapse): Likewise.
(cp_parser_enumerator_definition): Don't call
* decl.c (build_enumerator): ... call fold_non_dependent_expr here.
* typeck2.c (massage_init_elt): Use fold_non_dependent_expr.
* constexpr.c (maybe_constant_value): Allow VIEW_CONVERT_EXPR in
the final gcc_assert.
* constexpr.c (fold_non_dependent_expr): Add.
* cp-tree.h (fold_non_dependent_expr): Declare it.
* call.c (null_ptr_cst_p): Use it.
* pt.c (tsubst_copy_and_build, build_non_dependent_expr): Likewise.
* semantics.c (begin_maybe_infinite_loop): Likewise.
* typeck.c (cp_build_binary_op): Likewise.
* typeck2.c (check_narrowing): Likewise.
* pt.c (fold_non_dependent_expr): Rename to
(fold_non_dependent_expr_sfinae): Rename to
(convert_nontype_argument, build_non_dependent_expr): Adjust.
* decl.c (compute_array_index_type): Likewise.
* parser.c (cp_parser_parenthesized_expression_list,
cp_parser_enumerator_definition, cp_parser_omp_clause_collapse):
* semantics.c (end_maybe_infinite_loop, finish_static_assert):
* typeck.c (cxx_alignas_expr): Likewise.
* typeck2.c (store_init_value, massage_init_elt): Likewise.
* call.c: Adjust comments.
* class.c: Likewise.
* constexpr.c: Likewise.
* decl2.c: Likewise.
* tree.c: Likewise.
2014-11-14 Jonathan Wakely <>
* mangle.c (find_substitution): Look for abi_tag on class templates.
2014-11-13 Bernd Schmidt <>
Thomas Schwinge <>
Ilya Verbin <>
Andrey Turetskiy <>
* (c++.install-common): Do not install for the offload
2014-11-13 Kai Tietz <>
* cp-tree.h (cp_build_function_call): Remove prototype.
(cp_build_addr_expr_strict): Likewise.
(build_typed_address): Likewise.
* typeck.c (build_typed_address): Removed.
(cp_build_addr_expr_strict): Make static.
(cp_build_function_call): Likewise.
2014-11-12 Paolo Carlini <>
DR 1510
PR c++/60420
* cp-tree.h (struct cp_decl_specifier_seq): Add decltype_p bool field.
* decl.c (grokdeclarator): Use it.
* parser.c (cp_parser_simple_type_specifier): Likewise.
* pt.c (tsubst, case DECLTYPE_TYPE): Use tf_ignore_bad_quals.
2014-11-11 Paolo Carlini <>
PR c++/63265
* pt.c (tsubst_copy_and_build, case COND_EXPR): Maybe fold to
constant the condition.
2014-11-10 Andi Kleen <>
* semantics.c (finish_goto_stmt): Call check_no_cilk.
(finish_while_stmt_cond): Dito.
(finish_do_stmt): Dito.
(finish_for_cond): Dito.
(finish_switch_cond): Dito.
2014-11-10 Paolo Carlini <>
* typeck.c (cp_build_binary_op): Use OPT_Wshift_count_negative and
OPT_Wshift_count_overflow in the warnings.
2014-11-09 Jason Merrill <>
DR 799
* typeck.c (build_reinterpret_cast_1): reinterpret_cast to the
same scalar type is an rvalue.
DR 2007
* call.c (build_new_op_1): Don't do non-class lookup for =, -> or [].
2014-11-07 Jason Merrill <>
DR 1558
* pt.c (dependent_alias_template_spec_p): New.
(dependent_type_p_r): Handle dependent alias template specialization.
(template_args_equal): A dependent alias template specializations
is not equal to its underlying type as a template argument.
* tree.c (strip_typedefs): Don't strip a dependent alias
* parser.c (cp_parser_unqualified_id): Handle __func__ here.
(cp_parser_primary_expression): Not here.
2014-11-07 Thomas Preud'homme <>
PR c++/63366
* decl.c (grokdeclarator): Fix __complex meaning __complex double.
2014-10-29 Richard Sandiford <>
* constexpr.c: Remove redundant enum from machine_mode.
2014-10-28 Jason Merrill <>
* constexpr.c (cxx_eval_outermost_constant_expr): Tweak.
2014-10-28 Andrew MacLeod <>
* call.c: Adjust include files.
* class.c: Ditto.
* decl2.c: Ditto.
* decl.c: Ditto.
* lambda.c: Ditto.
* mangle.c: Ditto.
* method.c: Ditto.
* optimize.c: Ditto.
* parser.c: Ditto.
* semantics.c: Ditto.
* tree.c: Ditto.
* vtable-class-hierarchy.c: Ditto.
2014-10-24 Jason Merrill <>
Implement N3653 (Member initializers and aggregates) and fix
references to 'this' in constexpr constructors.
* class.c (check_field_decls): In C++14 an NSDMI does not make the
class non-aggregate.
* constexpr.c (struct constexpr_ctx): New.
(cxx_bind_parameters_in_call): Handle 'this'.
(cxx_eval_call_expression): Create new constexpr_ctx.
(cxx_eval_component_reference): Check CONSTRUCTOR_NO_IMPLICIT_ZERO.
(initialized_type, init_subob_ctx, verify_ctor_sanity): New.
(cxx_eval_bare_aggregate): Use them. Build CONSTRUCTOR early.
(cxx_eval_vec_init_1): Likewise.
(cxx_eval_constant_expression) [PARM_DECL]: Allow 'this'.
[TARGET_EXPR]: Build new constexpr_ctx.
(cxx_eval_outermost_constant_expr): Build new constexpr_ctx. Add
object parameter.
(is_sub_constant_expr): Build new constexpr_ctx.
(potential_constant_expression_1): Handle PLACEHOLDER_EXPR.
Allow 'this'.
* cp-gimplify.c (cp_gimplify_init_expr): Call replace_placeholders.
* error.c (dump_expr): Handle PLACEHOLDER_EXPR.
* init.c (get_nsdmi): Generate PLACEHOLDER_EXPR.
* tree.c (lvalue_kind): Handle PLACEHOLDER_EXPR.
(build_ctor_subob_ref, replace_placeholders): New.
* typeck2.c (store_init_value): Use replace_placeholders.
(process_init_constructor_record): Make zero-init before NSDMI
2014-10-27 Andrew MacLeod <>
* cp-gimplify.c: Adjust include files.
2014-10-26 Manuel López-Ibáñez <>
PR c++/53061
* cp-objcp-common.c: Do not include new.
(cxx_initialize_diagnostics): Move from here to ...
* error.c (cxx_initialize_diagnostics): : ... here. Move
diagnostics initialization here from init_error.
(cxx_pp): Use a real pointer not a macro.
(init_error): Just initialize cxx_pp.
* cxx-pretty-print.c (cxx_pretty_printer::cxx_pretty_printer): Do
not set maximum line length.
2014-10-23 Jonathan Wakely <>
PR c++/63619
* decl2.c (delete_sanity): Use OPT_Wdelete_incomplete in warning.
2014-10-21 Paolo Carlini <>
* parser.c (cp_parser_unary_expression): Add default arguments.
(cp_parser_cast_expression, cp_parser_sizeof_operand,
cp_parser_omp_atomic): Adjust.
2014-10-20 Jason Merrill <>
PR c++/63601
* lambda.c (current_nonlambda_function): New.
* semantics.c (finish_this_expr): Use it.
* cp-tree.h: Declare it.
2014-10-17 Alan Modra <>
PR middle-end/61848
* decl.c (merge_decls): Don't merge section name, comdat group or
tls model to newdecl symtab node, instead merge to olddecl.
Override existing olddecl section name. Set tls_model for all
thread-local vars, not just OMP thread-private ones. Remove
incorrect comment.
2014-10-16 Andrew MacLeod <>
* cp-tree.h: Adjust include files.
2014-10-15 Jason Merrill <>
PR c++/63528
* pt.c (lookup_template_variable): Call coerce_template_parms.
2014-10-15 Paolo Carlini <>
* semantics.c (is_instantiation_of_constexpr, literal_type_p,
constexpr_fundef_hasher::equal, constexpr_fundef_hasher::hash,
retrieve_constexpr_fundef, is_valid_constexpr_fn,
build_anon_member_initialization, build_data_member_initialization,
check_constexpr_bind_expr_vars, check_constexpr_ctor_body_1,
check_constexpr_ctor_body, sort_constexpr_mem_initializers,
build_constexpr_constructor_member_initializers, constexpr_fn_retval,
massage_constexpr_body, cx_check_missing_mem_inits,
register_constexpr_fundef, explain_invalid_constexpr_fn,
constexpr_call_hasher::hash, constexpr_call_hasher::equal,
maybe_initialize_constexpr_call_table, get_function_named_in_call,
get_nth_callarg, lookup_parameter_binding,
cxx_eval_builtin_function_call, adjust_temp_type,
cxx_bind_parameters_in_call, push_cx_call_context,
pop_cx_call_context, cx_error_context, cxx_eval_call_expression,
reduced_constant_expression_p, verify_constant,
cxx_eval_unary_expression, cxx_eval_binary_expression,
cxx_eval_conditional_expression, cxx_eval_array_reference,
cxx_eval_component_reference, cxx_eval_bit_field_ref,
cxx_eval_logical_expression, base_field_constructor_elt,
cxx_eval_bare_aggregate, cxx_eval_vec_init_1, cxx_eval_vec_init,
cxx_fold_indirect_ref, cxx_eval_indirect_ref, non_const_var_error,
cxx_eval_trinary_expression, var_in_constexpr_fn,
cxx_eval_constant_expression, cxx_eval_outermost_constant_expr,
is_sub_constant_expr, cxx_constant_value, maybe_constant_value,
maybe_constant_init, potential_constant_expression_1,
potential_constant_expression, potential_rvalue_constant_expression,
require_potential_rvalue_constant_expression): Moved definitions...
* constexpr.c: ... here, new file.
* Update.
* Likewise.
2014-10-14 Jason Merrill <>
PR c++/63455
* parser.c (struct saved_token_sentinel): New.
(cp_parser_statement): Use it.
(cp_parser_start_tentative_firewall): New.
(cp_parser_end_tentative_firewall): New.
(cp_parser_lambda_expression): Use them.
(cp_parser_statement_expr): New.
(cp_parser_primary_expression): Use it.
2014-10-14 DJ Delorie <>
* typeck.c (cp_common_type): Check for all __intN types, not just
* decl.c (grokdeclarator): Likewise.
* rtti.c (emit_support_tinfos): Check for all __intN types, not just
* parser.c (cp_lexer_next_token_is_decl_specifier_keyword): Check
for all __intN types, not just __int128.
(cp_parser_simple_type_specifier): Likewise.
* mangle.c (integer_type_codes): Remove int128-specific codes.
* cp-tree.h (cp_decl_specifier_seq): Add int_n_idx to store which
__intN was specified.
* lex.c (init_reswords): Reserve all __intN keywords.
2014-10-14 Marc Glisse <>
* typeck.c (cp_build_unary_op) [TRUTH_NOT_EXPR]: Accept float vectors.
2014-10-13 H.J. Lu <>
* mangle.c (mangle_conv_op_name_for_type): Cast elements to
unsigned long.
(print_template_statistics): Cast size and elements to long.
2014-10-12 Trevor Saunders <>
* cp-gimplify.c, cp-tree.h, decl.c, mangle.c, name-lookup.c,
pt.c, semantics.c, tree.c, typeck2.c: Use hash_table instead of
2014-10-10 Jason Merrill <>
PR c++/62115
* class.c (build_base_path): Preserve rvalueness.
* call.c (convert_like_real) [ck_base]: Let convert_to_base handle &/*.
* rtti.c (build_dynamic_cast_1): Call convert_to_reference later.
PR c++/63194
* method.c (defaulted_late_check): Call maybe_instantiate_noexcept.
* method.c (implicitly_declare_fn): Handle deleted lambda default
ctor and copy assop here.
* class.c (check_bases_and_members): Not here.
(add_implicitly_declared_members): And don't set
* semantics.c (finish_id_expression): Check for error_mark_node.
2014-10-09 Jason Merrill <>
PR c++/63207
* semantics.c (outer_var_p): Non-static.
(process_outer_var_ref): Split out from finish_id_expression.
* pt.c (tsubst_copy_and_build): Call them.
* cp-tree.h: Declare them.
2014-10-09 Paolo Carlini <>
* semantics.c (check_constexpr_ctor_body_1): New.
(check_constexpr_ctor_body): Use it; add bool parameter.
(build_data_member_initialization): Handle BIND_EXPR and
USING_STMT in the main conditional.
(build_constexpr_constructor_member_initializers): Do not
handle BIND_EXPR here.
(constexpr_fn_retval): Handle BIND_EXPR in the switch.
(massage_constexpr_body): Don't do it here.
* parser.c (cp_parser_ctor_initializer_opt_and_function_body):
Adjust check_constexpr_ctor_body call.
(cp_parser_compound_statement): Do not pedwarn for compound-statement
in constexpr function in C++14 mode.
* cp-tree.h (check_constexpr_ctor_body): Update declaration.
2014-10-09 Jason Merrill <>
PR c++/63309
* parser.c (cp_parser_class_head): push_template_decl for members
of templates, too.
PR c++/63415
* pt.c (value_dependent_expression_p) [CONSTRUCTOR]: Check the type.
(iterative_hash_template_arg): Likewise.
PR c++/63437
* cp-tree.h (REF_PARENTHESIZED_P): Also allow INDIRECT_REF.
* semantics.c (force_paren_expr): And set it.
* typeck.c (check_return_expr): And handle it.
2014-10-09 Marc Glisse <>
* decl.c (grokdeclarator): constexpr only implies const in C++11.
2014-10-08 Jason Merrill <>
PR c++/63405
* pt.c (tsubst_pack_expansion): Limit simple expansion to type packs.
PR c++/63485
* tree.c (build_cplus_array_type): Look for a type with no
typedef-name or attributes.
* call.c (call_copy_ctor): New.
(build_over_call): Use it to avoid infinite recursion on invalid code.
2014-10-07 Jason Merrill <>
* tree.c (cp_tree_equal) [TRAIT_EXPR]: Use cp_tree_equal for type2.
2014-10-06 Edward Smith-Rowland <>
* cp/parser.c: Allow [[deprecated]] for C++11. Issue a pedwarn.
2014-10-06 Paolo Carlini <>
PR c++/55250
* semantics.c (check_constexpr_bind_expr_vars): New.
(check_constexpr_ctor_body, massage_constexpr_body): Use it.
(build_constexpr_constructor_member_initializers): Handle
BIND_EXPR in the main conditional.
2014-10-02 Mark Wielaard <>
PR debug/63239
* cp-objcp-common.h (LANG_HOOKS_FUNCTION_DECL_DELETED_P): Define.
(cp_function_decl_deleted_p): New prototype.
* cp-objcp-common.c (cp_function_deleted_p): New function.
2014-10-03 Marc Glisse <>
PR c++/54427
PR c++/57198
PR c++/58845
* typeck.c (cp_build_binary_op): save_expr after convert to save
redundant operations.
(cp_build_unary_op) [TRUTH_NOT_EXPR]: Likewise.
2014-10-03 Jason Merrill <>
* decl.c (start_decl): Complain about static/thread_local vars
in constexpr function.
(check_for_uninitialized_const_var): Also uninitialized vars.
* parser.c (cp_parser_jump_statement): And gotos.
(cp_parser_asm_operand_list): And asm.
(cp_parser_try_block): And try.
* semantics.c (ensure_literal_type_for_constexpr_object): And
* semantics.c (constexpr_fn_retval): Ignore declarations in C++14.
(var_in_constexpr_fn): New.
(cxx_eval_constant_expression): Look into DECL_INITIAL.
(potential_constant_expression_1): Allow constexpr-local vars.
PR c++/63362
* tree.c (strip_typedefs): Handle TREE_LIST.
2014-10-03 Paolo Carlini <>
* parser.c (cp_parser_assignment_expression,
cp_parser_constant_expression): Add default arguments.
cp_parser_expression, cp_parser_constant_expression,
cp_parser_label_for_labeled_statement, cp_parser_static_assert,
cp_parser_template_argument, cp_parser_enumerator_definition,
cp_parser_member_declaration, cp_parser_constant_initializer,
cp_parser_noexcept_specification_opt, cp_parser_throw_expression,
cp_parser_std_attribute_spec, cp_parser_objc_message_args,
cp_parser_objc_class_ivars, cp_parser_omp_clause_collapse,
cp_parser_omp_clause_aligned, cp_parser_omp_clause_safelen,
cp_parser_omp_clause_simdlen, cp_parser_omp_clause_dist_schedule,
cp_parser_omp_for_incr, cp_parser_omp_for_loop_init,
cp_parser_cilk_simd_vectorlength, cp_parser_cilk_simd_linear): Adjust.
2014-10-02 Paolo Carlini <>
PR c++/53025
* cp-tree.h (struct saved_scope): Add noexcept_operand.
(cp_noexcept_operand): Define.
* call.c (build_over_call): Use it.
* parser.c (cp_parser_unary_expression, [RID_NOEXCEPT]): Likewise.
* pt.c (tsubst_copy_and_build, [NOEXCEPT_EXPR]): Likewise.
2014-10-01 Jason Merrill <>
PR c++/63362
* method.c (constructible_expr): Handle value-init of non-class.
* parser.c (cp_parser_trait_expr): Allow pack expansion.
* pt.c (tsubst_copy_and_build): Handle pack expansion.
PR c++/63362
* class.c (type_has_non_user_provided_default_constructor): Rename
from type_has_user_provided_default_constructor, reverse sense.
(default_init_uninitialized_part, explain_non_literal_class): Adjust.
(check_bases_and_members): Set TYPE_HAS_COMPLEX_DFLT.
* call.c (build_new_method_call_1): Adjust.
* cp-tree.h: Adjust.
* decl.c (grok_special_member_properties): Don't set
* init.c (build_value_init_noctor): Don't use
2014-09-30 Jason Merrill <>
* cp-tree.h (cp_trait_kind): Add CPTK_IS_TRIVIALLY_ASSIGNABLE and
* cxx-pretty-print.c (pp_cxx_trait_expression): Likewise.
* parser.c (cp_parser_primary_expression): Likewise.
(cp_parser_trait_expr): Likewise. Handle variadic trait.
* semantics.c (trait_expr_value): Likewise.
(finish_trait_expr): Likewise.
(check_trait_type): Handle variadic trait. Return bool.
* method.c (build_stub_object): Add rvalue reference here.
(locate_fn_flags): Not here.
(check_nontriv, assignable_expr, constructible_expr): New.
(is_trivially_xible): New.
* cp-tree.h (cp_trait_kind): Add CPTK_IS_TRIVIALLY_COPYABLE.
* cxx-pretty-print.c (pp_cxx_trait_expression): Likewise.
* parser.c (cp_parser_primary_expression): Likewise.
(cp_parser_trait_expr): Likewise.
* semantics.c (trait_expr_value): Likewise.
(finish_trait_expr): Likewise.
* method.c (build_stub_object): Use CONVERT_EXPR.
* tree.c (build_dummy_object): Likewise.
(is_dummy_object): Adjust.
* cp-tree.h (cp_trait_kind): Remove CPTK_IS_CONVERTIBLE_TO.
* cxx-pretty-print.c (pp_cxx_trait_expression): Likewise.
* semantics.c (trait_expr_value): Likewise.
(finish_trait_expr): Likewise.
* parser.c (cp_parser_primary_expression): Likewise.
(cp_parser_trait_expr): Likewise. Remove redundant grokdeclarator.
2014-09-30 Manuel López-Ibáñez <>
PR c++/16564
* error.c (print_instantiation_context): Delete.
* typeck2.c (build_x_arrow): Record location when pushing
template instantiation.
* pt.c (push_tinst_level): Make it a wrapper around ...
(push_tinst_level_loc): ... this. New function. Make excessive
template instantiation depth a fatal error. Record location. Use
bool as return type.
(instantiate_pending_templates): Make excessive
template instantiation depth a fatal error.
(problematic_instantiation_changed): Use bool as return type.
* cp-tree.h (print_instantiation_context): Delete.
(push_tinst_level): Update declaration.
(problematic_instantiation_changed): Likewise.
(push_tinst_level_loc): New.
2014-09-29 Richard Biener <>
* typeck.c (enum_cast_to_int): Use CONVERT_EXPR_P to check
for conversions.
2014-09-26 Jason Merrill <>
* mangle.c (find_substitution): Use write_abi_tags.
2014-09-25 Marek Polacek <>
PR c++/61945
* class.c (warn_hidden): Check for FUNCTION_DECL.
2014-09-25 Jakub Jelinek <>
PR c++/63249
* semantics.c (handle_omp_array_sections_1): Call mark_rvalue_use
on low_bound and length.
2014-09-24 Aldy Hernandez <>
* class.c, decl.c, optimize.c: Rename all instances of
2014-09-24 Marek Polacek <>
PR c/61405
PR c/53874
* semantics.c (finish_switch_cond): Call unlowered_expr_type.
* tree.c (bot_manip): Add default case.
* parser.c (cp_parser_primary_expression): Cast the controlling
expression of a switch to an int.
(cp_parser_unqualified_id): Likewise.
2014-09-23 Paolo Carlini <>
PR c++/61857
* parser.c (cp_parser_skip_to_closing_square_bracket,
cp_parser_array_designator_p): New.
(cp_parser_initializer_list): Use the latter.
2014-09-22 Jason Merrill <>
* semantics.c (finish_non_static_data_member): In diagnostic, give
error at point of use and note at point of declaration.
PR c++/63320
PR c++/60463
PR c++/60755
* lambda.c (maybe_resolve_dummy, lambda_expr_this_capture): Handle
not finding 'this'.
2014-09-22 Paolo Carlini <>
PR c++/62219
* pt.c (check_default_tmpl_args): Check LAMBDA_FUNCTION_P.
2014-09-22 Jason Merrill <>
* decl.c (poplevel): Don't warn about unused vars in template scope.
* error.c (dump_decl): Handle variable templates.
2014-09-20 Jason Merrill <>
PR c++/62017
* decl.c (begin_destructor_body): Only clobber the as-base part of
2014-09-19 Jason Merrill <>
PR c++/61392
* mangle.c (write_expression): Use unresolved-name mangling for
DR850 case.
PR c++/61465
* call.c (convert_like_real) [ck_identity]: Call mark_rvalue_use
after pulling out an element from a CONSTRUCTOR.
2014-09-18 Jakub Jelinek <>
PR c++/63248
* semantics.c (finish_omp_clauses): Don't call cp_omp_mappable_type
on type of type dependent expressions, and don't call it if
handle_omp_array_sections has kept TREE_LIST because something
was type dependent.
* pt.c (tsubst_expr) <case OMP_TARGET, case OMP_TARGET_DATA>:
Use keep_next_level, begin_omp_structured_block and
finish_omp_structured_block instead of push_stmt_list and
2014-09-18 Paolo Carlini <>
PR c++/62232
* class.c (finish_struct_1): Do not -Wnon-virtual-dtor warn
for final class types.
2014-09-15 Jason Merrill <>
* pt.c (lookup_template_class_1): Splice out abi_tag attribute if
necessary. Call inherit_targ_abi_tags here.
* class.c (check_bases_and_members): Not here.
(inherit_targ_abi_tags): Check CLASS_TYPE_P.
* cp-tree.h: Declare inherit_targ_abi_tags.
2014-09-15 Ville Voutilainen <>
Do not diagnose lambda default arguments in c++14 modes.
* parser.c (cp_parser_lambda_declarator_opt): Make the pedwarn
2014-09-15 Jakub Jelinek <>
* (check_g++_parallelize): Change to just an upper bound
2014-09-13 Marek Polacek <>
PR c++/60862
* parser.c (cp_parser_postfix_expression) <case CPP_OPEN_PAREN>: Set
location of a call expression.
2014-09-11 Jason Merrill <>
PR c++/63201
* decl.c (start_decl): Handle specialization of member variable
* pt.c (check_explicit_specialization): Adjust error.
2014-09-11 Paolo Carlini <>
PR c++/61489
* typeck2.c (process_init_constructor_record): Do not warn about
missing field initializer if EMPTY_CONSTRUCTOR_P (init).
2014-09-11 Jason Merrill <>
PR c++/63139
* pt.c (tsubst_pack_expansion): Simplify substitution into T....
(tsubst): Don't throw away PACK_EXPANSION_EXTRA_ARGS.
2014-09-10 Jason Merrill <>
PR c++/61659
* decl.c (grokfndecl): Don't set DECL_COMDAT on static inlines.
(duplicate_decls, start_decl): Likewise.
* pt.c (check_explicit_specialization): Likewise.
(push_template_decl_real): Or static templates.
2014-09-08 Jason Merrill <>
* typeck.c (build_class_member_access_expr): Move
-Winvalid-offsetof code...
* semantics.c (finish_offsetof):
* parser.c (cp_parser_builtin_offsetof): Remember the location of
the type argument.
* pt.c (tsubst_copy_and_build) [OFFSETOF_EXPR]: Preserve it.
PR c++/62255
* pt.c (instantiate_decl): Handle recursive instantiation of
static data member.
2014-09-05 Jason Merrill <>
PR c++/62659
* semantics.c (potential_constant_expression_1): Handle un-folded
pointer to member constants.
2014-09-04 Markus Trippelsdorf <>
PR ipa/61659
* decl.c (duplicate_decls): Check DECL_DECLARED_INLINE_P on
newdecl, not olddecl.
2014-09-02 Paolo Carlini <>
DR 1453
* class.c (check_field_decls): A class of literal type cannot have
volatile non-static data members and base classes.
(explain_non_literal_class): Update.
2014-09-02 Jakub Jelinek <>
Balaji V. Iyer <>
Igor Zamyatin <>
* cp-cilkplus.c (cpp_validate_cilk_plus_loop_aux): Loc definition
* parser.c (cp_parser_cilk_for): New function.
(cp_parser_cilk_grainsize): Likewise.
(cp_parser_statement): Added RID_CILK_FOR case.
(cp_parser_omp_for_cond): Added CILK_FOR check.
(cp_parser_omp_for_loop_init): Change function argument to accept
tree_code instead just a bool flag; change the check to use that
tree_code; check for initialization declaration in case of Cilk_for.
(cp_parser_omp_for_loop): Added checks for CILK_FOR and RID_CILK_FOR;
changed call to cp_parser_omp_for_loop_init according new arguments'
(cp_parser_pragma): Added PRAGMA_CILK_GRAINSIZE case.
* pt.c (tsubst_expr): Added CILK_FOR case.
* semantics.c: Include convert.h.
(finish_omp_clauses): Properly handle OMP_CLAUSE_SCHEDULE_CILKFOR
(handle_omp_for_class_iterator): New argument lastp and its usage;
added NE_EXPR case.
(finish_omp_for): Changed call to handle_omp_for_class_iterator
according new arguments' list; in case of Cilk_for save very first
decl and create empty stmt_list block; use block to build correct
statement tree.
2014-08-31 Jason Merrill <>
PR c++/62302
* optimize.c (cdtor_comdat_group): Just look at the
2014-08-27 Paolo Carlini <>
PR c++/52892
* semantics.c (cxx_eval_call_expression): Use STRIP_NOPS on the
result of cxx_eval_constant_expression.
2014-08-26 Jason Merrill <>
PR c++/58624
* pt.c (tsubst_decl) [VAR_DECL]: Copy TLS model.
(tsubst_copy_and_build) [VAR_DECL]: Use TLS wrapper.
* semantics.c (finish_id_expression): Don't call TLS wrapper in a
2014-08-25 Jason Merrill <>
* pt.c (check_explicit_specialization): Don't complain about
non-template variable.
(template_for_substitution): Allow variable templates.
(check_template_variable): Fix logic for member var template.
* decl.c (start_decl): Don't complain about extra template header
* decl.c (start_decl): Look through member variable template.
* pt.c (tsubst_decl) [VAR_DECL]: Handle member variable templates.
* decl2.c (grokfield): Set DECL_CONTEXT earlier on
2014-08-25 Paolo Carlini <>
PR c++/34938
* cp-tree.h (TFF_POINTER): Add.
* cxx-pretty-print.h (pp_cxx_cv_qualifiers): Forward the third
argument too.
* error.c (dump_type_suffix): Actually print the const and noreturn
attribute when appropriate.
2014-08-23 Edward Smith-Rowland <>
* decl.c (compute_array_index_type, grokdeclarator,
undeduced_auto_decl): Change from cxx1y to cxx14.
*lambda.c(add_capture()): Change error message from C++1y to C++14.
* parser.c (cp_parser_unqualified_id, cp_parser_pseudo_destructor_name,
cp_parser_lambda_introducer, cp_parser_lambda_declarator_opt,
cp_parser_decltype, cp_parser_conversion_type_id,
cp_parser_simple_type_specifier, cp_parser_type_id_1,
cp_parser_template_type_arg, cp_parser_std_attribute,
cp_parser_template_declaration_after_export): Ditto.
* pt.c (tsubst): Ditto.
* semantics.c (force_paren_expr, finish_decltype_type): Ditto.
* tree.c: Change comment.
* typeck.c (comp_template_parms_position, cxx_sizeof_or_alignof_type,
cp_build_addr_expr_1, maybe_warn_about_useless_cast): Ditto.
2014-08-23 Jason Merrill <>
Allow non-constexpr variable templates.
* decl2.c (note_variable_template_instantiation): New.
* cp-tree.h: Declare it.
* pt.c (instantiate_decl): Call it.
(push_template_decl_real): Allow non-constexpr variable templates.
* semantics.c (finish_id_expression): Mark the variable template
instantiation as used.
* mangle.c (write_mangled_name): Variable template instantiations
are mangled.
* parser.c (cp_parser_init_declarator): Complain about
non-function implicit templates.
2014-08-22 Marek Polacek <>
PR c++/62199
* parser.c (cp_parser_binary_expression): Check each LHS if it's
preceded with logical not. Adjust call to
2014-08-22 Manuel López-Ibáñez <>
PR c++/57709
* name-lookup.c (pushdecl_maybe_friend_1): Do not warn if a
declaration shadows a function declaration, unless the former
declares a function, pointer to function or pointer to member
function, because this is a common and valid case in real-world
Improve description.
2014-08-22 Jason Merrill <>
PR c++/62129
* class.c (outermost_open_class): Fix logic.
* decl.c (complete_vars): Fix logic.
2014-08-22 Jason Merrill <>
PR c++/62129
* class.c (outermost_open_class): New.
* cp-tree.h: Declare it.
* decl.c (maybe_register_incomplete_var): Use it.
(complete_vars): Handle any constant variable.
* expr.c (cplus_expand_constant): Handle CONSTRUCTOR.
2014-08-22 Igor Zamyatin <>
PR other/62008
* cp-array-notation.c (build_array_notation_ref): Added correct
handling of case with incorrect array.
2014-08-21 Manuel López-Ibáñez <>
PR fortran/44054
* error.c (cp_diagnostic_finalizer): Delete.
(init_error): Do not set diagnostic_finalizer here.
2014-08-19 Marek Polacek <>
PR c++/62153
* call.c (build_new_op_1): Remember the type of arguments for
a comparison. If either operand of a comparison is a boolean
expression, call maybe_warn_bool_compare.
2014-08-19 Jason Merrill <>
PR tree-optimization/62091
* decl2.c (decl_needed_p): Return true for virtual functions when
PR lto/53808
PR c++/61659
* decl.c (maybe_commonize_var): Don't use DECL_COMDAT to trigger
2014-08-19 Gerald Pfeifer <>
* class.c (contains_empty_class_p): Remove.
2014-08-18 Paolo Carlini <>
* parser.c (cp_parser_expression): Add default arguments.
(cp_parser_primary_expression, cp_parser_postfix_expression,
cp_parser_array_notation, cp_parser_postfix_open_square_expression,
cp_parser_unary_expression, cp_parser_direct_new_declarator,
cp_parser_question_colon_clause, cp_parser_assignment_operator_opt,
cp_parser_lambda_body, cp_parser_expression_statement,
cp_parser_condition, cp_parser_c_for, cp_parser_range_for,
cp_parser_iteration_statement, cp_parser_jump_statement,
cp_parser_decltype_expr, cp_parser_noexcept_specification_opt,
cp_parser_asm_operand_list, cp_parser_objc_message_receiver,
cp_parser_objc_synchronized_statement, cp_parser_objc_throw_statement,
cp_parser_omp_var_list_no_open, cp_parser_omp_clause_num_threads,
cp_parser_omp_clause_num_teams, cp_parser_omp_clause_thread_limit,
cp_parser_omp_clause_linear, cp_parser_omp_clause_device,
cp_parser_omp_atomic, cp_parser_omp_for_loop_init,
cp_parser_omp_for_loop, cp_parser_omp_declare_reduction_exprs,
cp_parser_transaction_expression): Adjust.
2014-08-15 Jason Merrill <>
PR c++/61566
* pt.c (lookup_template_class_1): Revert recent change.
* mangle.c (CLASSTYPE_TEMPLATE_ID_P): Revert recent change.
PR c++/61566
* pt.c (instantiate_class_template_1): Ignore lambda on
(push_template_decl_real): A lambda is not primary.
(lookup_template_class_1): Don't look for a lambda partial
* lambda.c (maybe_add_lambda_conv_op): Distinguish between being
currently in a function and the lambda living in a function.
* mangle.c (CLASSTYPE_TEMPLATE_ID_P): False for lambda.
2014-08-15 Richard Biener <>
Jason Merrill <>
PR bootstrap/62077
* tree.c (build_min_array_type, set_array_type_canon): Split out...
(build_cplus_array_type): ...from here. Only call build_array_type
for main variants.
2014-08-15 Paolo Carlini <>
PR c++/62072
2014-07-09 Paolo Carlini <>
DR 1584
PR c++/57466
* pt.c (check_cv_quals_for_unify): Implement resolution, disregard
cv-qualifiers of function types.
2014-08-15 Manuel Lopez-Ibanez <>
* call.c (build_conditional_expr_1): Use OPT_Wextra in warning.
2014-08-14 Paolo Carlini <>
* typeck.c (composite_pointer_type, cxx_sizeof_or_alignof_type,
cp_build_array_ref, cp_build_function_call_vec): When a
pedwarn is suppressed under SFINAE, return error_mark_node.
* typeck.c (cxx_sizeof_or_alignof_type): Fix complain &
tf_warning_or_error, where complain is a bool, glitch.
2014-08-14 Ville Voutilainen <>
PR c++/62101
* decl.c (grokdeclarator): Move the check for friend initializers..
* decl2.c (grokfield) Postpone early return for friends
until after the initializer check.
2014-08-14 Paolo Carlini <>
PR c++/54377
* pt.c (coerce_template_parms): Improve error message vs default
2014-08-14 Paolo Carlini <>
* parser.c (cp_parser_init_declarator): Remove redundant check of
2014-08-13 Jason Merrill <>
* call.c (build_x_va_arg): Support passing non-POD through ....
(convert_arg_to_ellipsis): Likewise.
2014-08-13 Andrew Sutton <>
* pt.c (lookup_template_variable): Make dependent variable templates
have unknown type.
2014-08-13 Paolo Carlini <>
* parser.c (cp_parser_elaborated_type_specifier): Handle
specially cp_parser_template_id returning a BASELINK.
2014-08-13 Paolo Carlini <>
* parser.c (cp_parser_diagnose_invalid_type_name,
cp_parser_make_typename_type): Remove scope parameter.
cp_parser_elaborated_type_specifier): Adjust calls.
2014-08-12 Ville Voutilainen <>
Reject virt-specifiers on friends and member templates
* friend.c (do_friend): Diagnose virt-specifiers.
* pt.c (push_template_decl_real): Diagnose virt-specifiers.
2014-08-09 Paolo Carlini <>
* typeck2.c (check_narrowing): Add tsubst_flags_t parameter, change
return type to bool; in C++11 for constants give errors, not pedwarns.
* cp-tree.h (check_narrowing): Adjust declaration.
* call.c (convert_like_real): Update calls.
* semantics.c (finish_compound_literal): Likewise.
2014-08-08 Jason Merrill <>
* pt.c (lookup_template_class_1): Copy abi_tag.
2014-08-08 Kai Tietz <>
* semantics.c (expand_or_defer_fn_1): Check for keep-inline-dllexport
that we operate on a true inline.
2014-08-07 Trevor Saunders <>
* class.c, cp-gimplify.c, decl.c, decl2.c, error.c, method.c,
optimize.c, pt.c, semantics.c: Remove includes of pointer-set.h.
2014-08-07 Paolo Carlini <>
PR c++/51312
* decl.c (build_enumerator): Handle class types with conversion
operators via perform_implicit_conversion_flags and
* cvt.c (build_expr_type_conversion): Replace pair of errors
with error + inform.
2014-08-07 Jason Merrill <>
PR c++/62043
* parser.c (c_parse_file): Change sorry to fatal_error.
PR c++/61959
* semantics.c (cxx_eval_bare_aggregate): Handle POINTER_PLUS_EXPR.
2014-08-07 Trevor Saunders <>
* cp-tree.h, pt.c: Use hash_map instead of pointer_map.
2014-08-06 Jason Merrill <>
* init.c (build_vec_init): Fix constant initialization of
trailing elements.
(build_value_init_noctor): Call maybe_constant_init.
* semantics.c (maybe_constant_init): See through EXPR_STMT and
conversion to void.
PR c++/60417
* init.c (build_vec_init): Reorganize earlier change a bit.
PR c++/61994
* init.c (build_vec_init): Leave atype an ARRAY_TYPE
if we're just returning an INIT_EXPR.
2014-08-06 Jason Merrill <>
Braden Obrzut <>
* pt.c (check_explicit_specialization): Don't test
DECL_DECLARED_INLINE_P for a variable template.
2014-08-06 Paolo Carlini <>
PR c++/43906
* typeck.c (cp_build_binary_op): Extend to more cases the
-Waddress warning.
2014-08-01 Braden Obrzut <>
Implement constexpr variable templates
* decl.c (grokvardecl): Handle specializations of variable templates.
(grokdeclarator): Handle variable template id expressions and NULL_TREE
return from grokvardecl.
* decl2.c (check_member_template): Allow declaration of template member
* parser.c (cp_parser_template_id): Build a TEMPLATE_ID_EXPR for
variable templates.
* pt.c (check_template_variable): Accept variable temploids at
non-class scope.
(push_template_decl_real): The current instantiation of a template
can be a VAR_DECL.
(determine_specialization): Accept variable templates.
(check_explicit_specialization): Handle and check for malformed
variable template specializations.
(lookup_template_variable): New.
(tsubst_decl): Handle variable template specializations.
(do_decl_instantiation): Handle template variables.
(instantiate_decl): Handle template variables.
* semantics.c (finish_template_variable): New.
(finish_id_expression): Instantiate variable templates.
* cp-tree.h (variable_template_p): New.
2014-08-02 Paolo Carlini <>
PR c++/15339
* decl.c (check_redeclaration_no_default_args): New.
(duplicate_decls): Use it, handle default arguments
in redeclarations of function templates.
2014-08-02 Trevor Saunders <>
* optimize.c, semantics.c: Use hash_map instead of pointer_map.
2014-08-02 Trevor Saunders <>
* class.c, cp-gimplify.c, cp-tree.h, decl.c, decl2.c, error.c,
method.c, name-lookup.c, pt.c, semantics.c, tree.c: Use hash_set
instead of pointer_set.
2014-08-01 Jason Merrill <>
PR c++/60417
* init.c (build_vec_init): Set CONSTRUCTOR_IS_DIRECT_INIT on
init-list for trailing elements.
* typeck2.c (process_init_constructor_array): Likewise.
2014-08-01 Paolo Carlini <>
DR 217 again
* decl.c (duplicate_decls): Handle static member functions too.
2014-08-01 Igor Zamyatin <>
* cp-array-notation.c (expand_an_in_modify_expr): Fix the misprint
in error output.
2014-08-01 Igor Zamyatin <>
PR other/61963
* parser.c (cp_parser_array_notation): Added check for array_type.
2014-08-01 Igor Zamyatin <>
PR middle-end/61455
* cp-array-notation.c (expand_array_notation_exprs): Handling of
DECL_EXPR improved. Changed handling for INIT_EXPR.
2014-08-01 Paolo Carlini <>
* pt.c (lookup_template_class_1): Use DECL_TYPE_TEMPLATE_P.
2014-08-01 Jakub Jelinek <>
* cp-gimplify.c (cp_genericize_r): For -fsanitize=null and/or
-fsanitize=alignment call ubsan_maybe_instrument_reference
for casts to REFERENCE_TYPE and ubsan_maybe_instrument_member_call
for calls to member functions.
2014-07-31 Marc Glisse <>
PR c++/60517
* typeck.c (maybe_warn_about_returning_address_of_local): Return
whether it is returning the address of a local variable.
(check_return_expr): Return 0 instead of the address of a local
2014-07-30 Jason Merrill <>
PR lto/53808
PR c++/61659
* pt.c (push_template_decl_real): Don't set DECL_COMDAT on friends.
2014-07-30 Paolo Carlini <>
PR c++/57397
* pt.c (unify_arity): Add boolean parameter.
(unify_too_few_arguments): Likewise.
(type_unification_real): Diagnose correctly insufficient
arguments in the presence of trailing variadic parameters;
deducing multiple trailing packs as empty is fine.
2014-07-30 Jason Merrill <>
PR c++/61659
PR c++/61687
* decl2.c (mark_all_virtuals): New variable.
(maybe_emit_vtables): Check it instead of flag_devirtualize.
(cp_write_global_declarations): Set it and give helpful diagnostic
if it introduces errors.
* class.c (finish_struct_1): Check it.
PR lto/53808
PR c++/61659
* pt.c (push_template_decl_real): Set DECL_COMDAT on templates.
(check_explicit_specialization): Clear it on specializations.
* decl.c (duplicate_decls, start_decl): Likewise.
(grokmethod, grokfndecl): Set DECL_COMDAT on inlines.
* method.c (implicitly_declare_fn): Set DECL_COMDAT. Determine
linkage after setting the appropriate flags.
* tree.c (decl_linkage): Don't check DECL_COMDAT.
* decl2.c (mark_needed): Mark clones.
(import_export_decl): Not here.
2014-07-25 Edward Smith-Rowland <>
Implement N4051 - Allow typename in a template template parameter
* parser.c (cp_parser_type_parameter_key): New funtion;
(cp_parser_token_is_type_parameter_key): Ditto;
(cp_parser_type_parameter): Look for type-parameter-key for all versions
but pedwarn for less than cxx1z.
2014-07-17 Paolo Carlini <>
PR c++/50961
* call.c (standard_conversion): Use resolve_nondeduced_context
for type_unknown_p (EXPR) && TREE_CODE (TO) == BOOLEAN_TYPE.
2014-07-17 Paolo Carlini <>
PR c++/61804
* parser.c (cp_parser_tokens_start_cast_expression): Return -1
for '++' and '--'.
2014-07-15 Jason Merrill <>
PR c++/61811
* decl2.c (maybe_emit_vtables): Return true for -fuse-all-virtuals.
PR c++/60848
PR c++/61723
* call.c (is_std_init_list): Don't check CLASSTYPE_TEMPLATE_INFO.
* class.c (finish_struct): Reject invalid definition of
2014-07-15 Paolo Carlini <>
* call.c (convert_like_real): Call print_z_candidate and inform only
if permerror returns true.
2014-07-14 Jan Hubicka <>
* class.c (build_clone): Do not clear assembler names of
* decl.c (cp_tree_node_structure): Add TEMPLATE_DECL.
* cp-objcp-common.c (cp_tree_size): Add TEMPLATE_DECL
as a special case return sizeof (struct tree_decl_non_common)
for other decls.
(cp_common_init_ts): Do not initialize NAMESPACE_DECL;
* cp/cp-tree.h (tree_template_decl): New structure.
(cp_tree_node_structure_enum): Add TS_CP_TEMPLATE_DECL.
(union cp_lang_tree_node): Add template_decl.
2014-07-14 Jason Merrill <>
PR c++/61445
PR c++/56947
* pt.c (instantiate_decl): Don't check defer_ok for local class
2014-07-14 Jakub Jelinek <>
PR middle-end/61294
* cp-tree.h (LITERAL_ZERO_P): Define.
* parser.c (cp_parser_parenthesized_expression_list): Add
want_literal_zero_p argument, if true, for literal zeros
insert INTEGER_CSTs with LITERAL_ZERO_P flag set.
(cp_parser_postfix_expression): Adjust
cp_parser_parenthesized_expression_list caller, handle
(literal_zeros): New variable.
2014-07-13 Jason Merrill <>
PR c++/58511
* semantics.c (is_instantiation_of_constexpr): Return true for
defaulted functions, too.
(explain_invalid_constexpr_fn): Only use
explain_implicit_non_constexpr if !DECL_DECLARED_CONSTEXPR_P.
* method.c (explain_implicit_non_constexpr): Pass
DECL_INHERITED_CTOR_BASE to explain_implicit_non_constexpr.
PR c++/58611
* decl.c (check_initializer): Don't finish_compound_literal
on erroneous constexpr init.
PR c++/58612
* tree.c (bot_replace): Only replace a dummy 'this' parm.
PR c++/60628
* decl.c (create_array_type_for_decl): Only check for auto once.
PR c++/58636
* call.c (build_list_conv): Don't try to build a list of references.
2014-07-13 Edward Smith-Rowland <>
PR C++/60209 - Declaration of user-defined literal operator cause error
* parser.c (cp_parser_operator): Fold treatment of strings
and user-defined string literals. Use the full string parser.
(cp_parser_string_literal): Add flag to not look for literal operator.
2014-07-11 Jason Merrill <>
PR c++/22434
PR c++/61288
* call.c (build_conditional_expr_1): Avoid reading freed memory.
2014-07-11 Paolo Carlini <>
PR c++/53159
* call.c (build_user_type_conversion_1): Copy LOOKUP_NO_NARROWING
into convflags.
* decl.c (check_initializer): Don't call check_narrowing here,
* typeck2.c (digest_init_r): Likewise.
2014-07-10 Jason Merrill <>
PR c++/61661
* semantics.c (reduced_constant_expression_p): Handle CONSTRUCTOR.
PR c++/61659
PR c++/61687
* decl2.c (mark_all_virtuals): New variable.
(maybe_emit_vtables): Check it instead of flag_devirtualize.
(cp_write_global_declarations): Set it and give helpful diagnostic
if it introduces errors.
* class.c (finish_struct_1): Check it.
* decl.c (grokdeclarator): Clear virtualp after 'virtual auto' error.
2014-07-09 Paolo Carlini <>
PR c++/60686
* decl.c (grokdeclarator): Adjust error messages about 'explicit'
outside class declaration, in friend declaration, and neither on
constructor nor conversion operator.
2014-07-09 Paolo Carlini <>
DR 1584
PR c++/57466
* pt.c (check_cv_quals_for_unify): Implement resolution, disregard
cv-qualifiers of function types.
2014-07-09 Andrew Sutton <>
Paolo Carlini <>
PR c++/59361
* parser.c (cp_parser_tokens_start_cast_expression): Return 0 for
2014-07-07 Paolo Carlini <>
* class.c (check_for_override): Wrap the 'final' and 'override'
keywords in %< and %>.
2014-07-06 Marek Polacek <>
PR c/6940
* cp-tree.h (DECL_ARRAY_PARAMETER_P): Define.
* decl.c (grokdeclarator): Set DECL_ARRAY_PARAMETER_P.
* typeck.c (cxx_sizeof_expr): Warn when using sizeof on an array
function parameter.
2014-07-02 Paolo Carlini <>
* pt.c (convert_template_argument): Use inform instead of error in
three places.
2014-06-30 Edward Smith-Rowland <>
PR c++/58781
PR c++/60249
PR c++/59867
* parser.c (cp_parser_userdef_string_literal): Take a tree
not a cp_token*.
(cp_parser_string_literal): Don't hack the token stream.
2014-06-30 Jason Merrill <>
PR c++/61659
PR lto/53808
* decl2.c (maybe_emit_vtables): Mark all vtable entries if
* init.c (build_vtbl_address): Don't mark destructor.
* class.c (finish_struct_1): Add all classes to keyed_classes
if devirtualizing.
PR c++/61647
* pt.c (type_dependent_expression_p): Check BASELINK_OPTYPE.
PR c++/61566
* mangle.c (decl_mangling_context): Look through a TEMPLATE_DECL.
* decl.c (build_ptrmemfunc_type): Don't give a PMF RECORD_TYPE
* typeck.c (build_ptrmemfunc_access_expr): Don't use lookup_member.
* pt.c (unify): Also check whether the argument is a PMF.
2014-06-30 Paolo Carlini <>
PR c++/54891
* parser.c (cp_parser_tokens_start_cast_expression): In C++11
a '[' can also start a primary-expression.
(cp_parser_cast_expression): Parse a cast-expression only tentatively
when cp_parser_tokens_start_cast_expression returns -1.
2014-06-30 Jason Merrill <>
PR c++/61539
* pt.c (unify_one_argument): Type/expression mismatch just causes
deduction failure.
* semantics.c (simplify_aggr_init_expr): Remove remnants of
2014-04-11 change.
2014-06-30 Marek Polacek <>
* cp-gimplify.c (cp_genericize): Don't instrument returns if the
function has no_sanitize_undefined attribute.
* decl.c (compute_array_index_type): Don't instrument VLAs if the
function has no_sanitize_undefined attribute.
2014-06-30 Igor Zamyatin <>
PR middle-end/57541
* cp-array-notation.c (expand_sec_reduce_builtin):
Check that bultin argument is correct.
* call.c (build_cxx_call): Check for 0 arguments in builtin call.
2014-06-28 Jonathan Wakely <>
DR 1579
PR c++/58051
* typeck.c (check_return_expr): Lookup as an rvalue even when the
types aren't the same.
2014-06-27 Jason Merrill <>
PR c++/61433
* error.c (dump_template_bindings): Don't tsubst in a clone.
2014-06-27 Paolo Carlini <>
PR c++/61614
* semantics.c (finish_compound_literal): Revert r204228.
2014-06-27 Paolo Carlini <>
* parser.c (cp_parser_compound_literal_p): New.
(cp_parser_postfix_expression, cp_parser_sizeof_operand): Use it.
2014-06-26 Jason Merrill <>
* parser.c (cp_parser_for_init_statement): Change range-for error
to pedwarn.
N3994 Ranged-based for-loops: The Next Generation
* parser.c (cp_lexer_nth_token_is): New.
(cp_parser_for_init_statement): Allow "for (id : init)".
2014-06-26 Teresa Johnson <>
* class.c (dump_class_hierarchy): Use saved dump files.
(dump_vtable): Ditto.
(dump_vtt): Ditto.
2014-06-26 Adam Butcher <>
PR c++/61537
* parser.c (cp_parser_elaborated_type_specifier): Only consider template
parameter lists outside of function parameter scope.
2014-06-25 Paolo Carlini <>
DR 178
PR c++/49132
* typeck2.c (process_init_constructor_record): Do not complain about
uninitialized const members, because within aggregate-initialization,
members without explicit initializers are value-initialized.
2014-06-25 Jakub Jelinek <>
* semantics.c (finish_omp_clauses): Make sure
OMP_CLAUSE_LINEAR_STEP has correct type.
2014-06-24 Jan Hubicka <>
* class.c (check_methods, create_vtable_ptr, determine_key_method,
add_vcall_offset_vtbl_entries_1): Guard VINDEX checks by
* cp-tree.h (lang_decl_ns): Add ns_using and ns_users.
2014-06-24 Paolo Carlini <>
PR c++/33972
* decl.c (grokdeclarator): Do not early check for operator-function-id
as non-function.
2014-06-24 Trevor Saunders <>
* class.c, semantics.c, tree.c, vtable-class-hierarchy.c:
2014-06-24 Jakub Jelinek <>
* parser.c (cp_parser_omp_for_loop): For
#pragma omp parallel for simd move lastprivate clause from parallel
to for rather than simd.
2014-06-23 Paolo Carlini <>
DR 577
PR c++/33101
* decl.c (grokparms): Accept a single parameter of type 'void'.
2014-06-20 Jason Merrill <>
PR c++/59296
* call.c (add_function_candidate): Avoid special 'this' handling
if we have a ref-qualifier.
PR c++/61556
* call.c (build_over_call): Call build_this in template path.
2014-06-19 Jason Merrill <>
PR c++/59296
* call.c (add_function_candidate): Also set LOOKUP_NO_TEMP_BIND.
2014-06-18 Jason Merrill <>
PR c++/59296
* call.c (add_function_candidate): Set LOOKUP_NO_RVAL_BIND for
ref-qualifier handling.
PR c++/61507
* pt.c (resolve_overloaded_unification): Preserve
2014-06-18 Jakub Jelinek <>
* cp-gimplify.c (cxx_omp_finish_clause): Add a gimple_seq *
* cp-tree.h (cxx_omp_finish_clause): Adjust prototype.
2014-06-17 Jason Merrill <>
PR c++/60605
* pt.c (check_default_tmpl_args): Check DECL_LOCAL_FUNCTION_P.
2014-06-15 Jason Merrill <>
PR c++/61488
* pt.c (check_valid_ptrmem_cst_expr): Fix for template context.
PR c++/61500
* tree.c (lvalue_kind): Handle MEMBER_REF and DOTSTAR_EXPR.
2014-06-15 Jan Hubicka <>
* decl.c (grokvardecl): Fix pasto in previous patch.
2014-06-15 Jan Hubicka <>
* decl.c (duplicate_decls): Use set_decl_tls_model.
(grokdeclarator): Likewise.
* semantics.c (finish_id_expression): Check TLS only for
static variables.
(finish_omp_threadprivate): Use decl_default_tls_model.
* decl2.c (get_guard): Likewise.
* call.c (make_temporary_var_for_ref_to_temp): Likewise.
2014-06-14 Paolo Carlini <>
PR c++/33101
* decl.c (grokparms): Improve error message about void parameters.
* error.c (type_to_string): Fix aka cut off code.
2014-06-12 Jason Merrill <>
* call.c (convert_arg_to_ellipsis): Use abi_version_crosses.
* cvt.c (type_promotes_to): Likewise.
* mangle.c (write_type, write_expression): Likewise.
(write_name, write_template_arg): Likewise.
(mangle_decl): Make alias based on flag_abi_compat_version.
Emit -Wabi warning here.
(finish_mangling_internal): Not here. Drop warn parm.
(finish_mangling_get_identifier, finish_mangling): Adjust.
(mangle_type_string, mangle_special_for_type): Adjust.
(mangle_ctor_vtbl_for_type, mangle_thunk): Adjust.
(mangle_guard_variable, mangle_tls_init_fn): Adjust.
(mangle_tls_wrapper_fn, mangle_ref_init_variable): Adjust.
* call.c (build_operator_new_call): Remove -fabi-version=1 support.
* class.c (walk_subobject_offsets, include_empty_classes): Likewise.
(layout_nonempty_base_or_field, end_of_class): Likewise.
(layout_empty_base, build_base_field, layout_class_type): Likewise.
(is_empty_class, add_vcall_offset_vtbl_entries_1): Likewise.
(layout_virtual_bases): Likewise.
* decl.c (compute_array_index_type): Likewise.
* mangle.c (write_mangled_name, write_prefix): Likewise.
(write_template_prefix, write_integer_cst, write_expression): Likewise.
(write_template_arg, write_array_type): Likewise.
* method.c (lazily_declare_fn): Likewise.
* rtti.c (get_pseudo_ti_index): Likewise.
* typeck.c (comp_array_types): Likewise.
2014-06-11 Jan Hubicka <>
* vtable-class-hierarchy.c: Update handling for section names
that are no longer trees.
* decl.c (duplicate_decls): Likewise.
2014-06-11 Paolo Carlini <>
PR c++/19200
* parser.c (cp_parser_init_declarator): Actually pass friend_p
to cp_parser_declarator.
2014-06-11 Paolo Carlini <>
PR c++/60265
* parser.c (cp_parser_using_declaration): Handle unscoped enums.
* name-lookup.c (validate_nonmember_using_decl): Adjust error
2014-06-11 Paolo Carlini <>
PR c++/19200
* parser.c (cp_parser_declarator): Add bool parameter.
(cp_parser_direct_declarator): Likewise, use it.
(cp_parser_member_declaration): Pass friend_p to cp_parser_declarator.
(cp_parser_condition, cp_parser_explicit_instantiation,
cp_parser_init_declarator, cp_parser_type_id_1,
cp_parser_parameter_declaration, cp_parser_exception_declaration,
cp_parser_cache_defarg, cp_parser_objc_class_ivars,
cp_parser_objc_struct_declaration, cp_parser_omp_for_loop_init):
* decl.c (grokdeclarator): Fix handling of friend declared in
namespace scope (g++.dg/parse/friend10.C).
2014-06-10 Jan Hubicka <>
* vtable-class-hierarchy.c: Use symtab_get_node (var_decl)
* optimize.c (cdtor_comdat_group): Fix handling of aliases.
(maybe_clone_body): Move symbol across comdat groups.
* method.c (use_thunk): Copy implicit section flag.
2014-06-09 Paolo Carlini <>
PR c++/22556
* name-lookup.c (pushdecl_maybe_friend_1): Use comptypes.
2014-06-07 Jan Hubicka <>
* method.c (use_thunk): Use set_decl_section_name.
* optimize.c (maybe_clone_body): Use set_decl_section_name.
* decl.c (duplicate_decls): Likewise.
* vtable-class-hierarchy.c: Likewise.
2014-06-06 Paolo Carlini <>
PR c++/60184
* class.c (check_field_decls): In C++11 mode do not reject
static data members and reference-type members in unions.
2014-06-05 Jason Merrill <>
PR c++/43453
* decl.c (check_initializer): Collapse a TREE_LIST here.
* typeck2.c (store_init_value): Not here.
2014-06-05 Richard Biener <>
Paolo Carlini <>
PR c++/56961
* cp-gimplify.c (cp_gimplify_expr, [MODIFY_EXPR]): Rework
handling of empty classes.
2014-06-04 Jason Merrill <>
* parser.c (cp_parser_diagnose_invalid_type_name): Give helpful note
for noexcept and thread_local, too.
PR c++/61343
* decl.c (check_initializer): Maybe clear
2014-06-05 Richard Biener <>
PR c++/61004
* typeck.c (cp_build_indirect_ref): Do not emit strict-aliasing
warnings for accessing empty classes.
2014-06-05 Marek Polacek <>
PR c/49706
* parser.c (cp_parser_binary_expression): Warn when logical not is
used on the left hand side operand of a comparison.
2014-06-04 Paolo Carlini <>
PR c++/43453
* typeck.c (cp_build_modify_expr): Handle array of characters
initialized by a string literal.
* decl.c (check_initializer): Handle parenthesized string literal
as initializer.
* typeck2.c (store_init_value): Remove redundant check.
2014-06-04 Jason Merrill <>
PR c++/51253
PR c++/61382
* cp-gimplify.c (cp_gimplify_expr): Handle CALL_EXPR_LIST_INIT_P here.
* semantics.c (simplify_aggr_init_expr): Not here, just copy it.
2014-06-04 Igor Zamyatin <>
PR c/58942
* cp-array-notation.c (expand_sec_reduce_builtin): Handle the case
with a pointer.
2014-06-03 Paolo Carlini <>
DR 1423
PR c++/52174
* call.c (standard_conversion): Convert nullptr to bool only
in case of direct-initialization.
(convert_like_real): Provide informative error message.
2014-06-03 Marek Polacek <>
PR c/60439
* semantics.c (finish_switch_cond): Warn if switch condition has
boolean value.
2014-06-03 Jason Merrill <>
PR c++/60992
* pt.c (tsubst_copy) [VAR_DECL]: Try lookup first. Add a new
variable to local_specializations.
PR c++/60848
* call.c (is_std_init_list): Check CLASSTYPE_TEMPLATE_INFO.
2014-06-02 Jason Merrill <>
PR c++/61046
* decl.c (reshape_init_class): Handle un-folded
PR c++/61134
* pt.c (pack_deducible_p): Handle canonicalization.
2014-06-02 Paolo Carlini <>
* pt.c (tsubst_function_type): Initialize arg_types.
2014-06-02 Siva Chandra Reddy <>
PR debug/57519
* class.c (handle_using_decl): Pass the correct scope to
2014-06-02 Ville Voutilainen <>
PR c++/59483
PR c++/61148
* search.c (accessible_p): Use current_nonlambda_class_type.
* semantics.c (check_accessibility_of_qualified_id): Likewise.
2014-06-02 Andrew MacLeod <>
* decl.c: Include builtins.h.
* semantics.c: Likewise.
2014-05-31 Paolo Carlini <>
DR 1227
PR c++/57543
* cp-tree.h (TYPE_HAS_LATE_RETURN_TYPE): Add.
* pt.c (tsubst_function_type): Inject the this parameter; do the
substitutions in the order mandated by the DR.
(copy_default_args_to_explicit_spec): Copy TYPE_HAS_LATE_RETURN_TYPE.
* decl.c (grokdeclarator): Maybe set TYPE_HAS_LATE_RETURN_TYPE.
(static_fn_type): Copy it.
* decl2.c (build_memfn_type, change_return_type,
cp_reconstruct_complex_type): Likewise.
* parser.c (cp_parser_lambda_declarator_opt): Likewise.
* tree.c (strip_typedefs): Likewise.
* typeck.c (merge_types): Likewise.
2014-05-30 Jason Merrill <>
PR c++/56947
* pt.c (instantiate_decl): Check that defer_ok is not set for
local class members.
PR c++/60992
* pt.c (tsubst_init): Split out from...
(tsubst_expr) [DECL_EXPR]: Here.
(tsubst_copy) [VAR_DECL]: Use it.
* semantics.c (finish_id_expression): Return the decl for static/const.
2014-05-28 Jason Merrill <>
PR c++/47202
* decl.c (cxx_comdat_group): Return a decl.
* optimize.c (cdtor_comdat_group): Get its DECL_ASSEMBLER_NAME.
* pt.c (tsubst) [ARRAY_TYPE]: Check for array of array of unknown
PR c++/61242
* call.c (build_aggr_conv): Ignore passed in flags.
(build_array_conv, build_complex_conv): Likewise.
2014-05-23 Jan Hubicka <>
* optimize.c (maybe_thunk_body): Use set_comdat_group.
(maybe_clone_body): Likewise.
* decl.c (duplicate_decls): Update code duplicating comdat group;
do not copy symtab pointer; before freeing newdecl remove it
from symtab.
* decl2.c (constrain_visibility): Use set_comdat_group.
2014-05-23 Jan Hubicka <>
* rtti.c: Include tm_p.h
(emit_tinfo_decl): Force RTTI data to be aligned to required
ABI alignment only.
2014-05-23 Jan Hubicka <>
* class.c (build_vtable): Align vtables to TARGET_VTABLE_ENTRY_ALIGN
ignoring other target adjustments.
2014-05-23 Thomas Schwinge <>
* semantics.c (finish_omp_clauses): Remove duplicated variable
* parser.c (cp_parser_omp_target): Return bool values.
2014-05-22 Paolo Carlini <>
PR c++/61088
* lambda.c (add_capture): Enforce that capture by value requires
complete type.
* typeck2.c (cxx_incomplete_type_inform): Early return if
2014-05-21 Jonathan Wakely <>
PR c/61271
* cp-array-notation.c (cilkplus_an_triplet_types_ok_p): Fix condition.
2014-05-21 Ville Voutilainen <>
PR c++/61133
* lambda.c (build_capture_proxy, add_capture): Treat normal
captures and init-captures identically.
2014-05-21 Mark Wielaard <>
PR debug/16063
* cp-lang.c (cxx_enum_underlying_base_type): New function.
2014-05-21 Richard Sandiford <>
* cvt.c (convert_to_void): Use void_node instead of void_zero_node.
* cp-array-notation.c (replace_invariant_exprs): Likewise.
(expand_array_notation): Handle VOID_CST.
* error.c (dump_expr): Likewise.
* cxx-pretty-print.c (cxx_pretty_printer::primary_expression)
(cxx_pretty_printer::expression): Likewise.
(pp_cxx_new_expression): Use void_node instead of void_zero_node.
* decl.c (register_dtor_fn): Likewise.
* init.c (build_raw_new_expr, build_new_1, build_vec_init)
(build_delete, push_base_cleanups): Likewise.
* mangle.c (write_expression): Likewise.
* semantics.c (finish_break_stmt, empty_expr_stmt_p): Likewise.
* pt.c (tsubst_decl, tsubst_copy_and_build): Likewise.
(tsubst, tsubst_copy, build_non_dependent_expr): Handle VOID_CST.
* tree.c (cp_tree_equal): Likewise.
(build_dummy_object, is_dummy_object, stabilize_expr): Use void_node
instead of void_zero_node.
* typeck.c (check_return_expr): Likewise.
* typeck2.c (build_functional_cast): Likewise.
2014-05-21 Igor Zamyatin <>
PR c/60189
* parser.c (cp_parser_postfix_expression): Move handling of cilk_sync
from here to...
(cp_parser_statement): Make sure only semicolon can go after
2014-05-20 Paolo Carlini <>
PR c++/58753
PR c++/58930
PR c++/58704
* typeck2.c (digest_nsdmi_init): New.
* parser.c (cp_parser_late_parse_one_default_arg): Use it.
* init.c (get_nsdmi): Likewise.
* cp-tree.h (digest_nsdmi_init): Declare.
2014-05-20 Jason Merrill <>
* typeck.c (get_member_function_from_ptrfunc): Don't try to look
up a virtual function in a dummy object.
2014-05-20 Paolo Carlini <>
PR c++/60373
* decl.c (duplicate_decls): Replace pair of warning_at with
warning_at + inform.
(maybe_commonize_var): Likewise.
2014-05-20 Richard Sandiford <>
PR bootstrap/61210
* pt.c (tsubst_copy, tsubst_omp_for_iterator, tsubst_expr)
(tsubst_copy_and_build): Perform recursive substitutions in a
deterministic order.
2014-05-20 Paolo Carlini <>
PR c++/58664
* typeck2.c (cxx_incomplete_type_inform): New.
(cxx_incomplete_type_diagnostic): Use it.
* decl.c (grokdeclarator): Check the element type of an
incomplete array type; call the above.
* cp-tree.h (cxx_incomplete_type_inform): Declare.
2014-05-19 Jason Merrill <>
PR c++/58761
* pt.c (tsubst_copy): Don't check at_function_scope_p.
(instantiate_class_template_1): Don't push_to_top_level in an nsdmi.
2014-05-19 Paolo Carlini <>
* typeck2.c (cxx_incomplete_type_diagnostic): Use inform.
* parser.c (cp_parser_enum_specifier): Likewise.
2014-05-17 Trevor Saunders <>
* class.c (sorted_fields_type_new): Adjust.
* cp-cilkplus.c (cilk_install_body_with_frame_cleanup): Likewise.
* cp-objcp-common.c (decl_shadowed_for_var_insert): Likewise.
* cp-tree.h: Remove usage of variable_size gty attribute.
* decl.c (make_label_decl): Adjust.
(check_goto): Likewise.
(start_preparsed_function): Likewise.
(save_function_data): Likewise.
* lex.c (init_reswords): Likewise.
(retrofit_lang_decl): Likewise.
(cxx_dup_lang_specific_decl): Likewise.
(copy_lang_type): Likewise.
(cxx_make_type): Likewise.
* name-lookup.c (binding_entry_make): Likewise.
(binding_table_construct): Likewise.
(binding_table_new): Likewise.
(cxx_binding_make): Likewise.
(pushdecl_maybe_friend_1): Likewise.
(begin_scope): Likewise.
(push_to_top_level): Likewise.
* parser.c (cp_lexer_alloc): Likewise.
(cp_lexer_new_from_tokens): Likewise.
(cp_token_cache_new): Likewise.
(cp_parser_context_new): Likewise.
(cp_parser_new): Likewise.
(cp_parser_nested_name_specifier_opt): Likewise.
(cp_parser_template_id): Likewise.
* pt.c (maybe_process_partial_specialization): Likewise.
(register_specialization): Likewise.
(add_pending_template): Likewise.
(lookup_template_class_1): Likewise.
(push_tinst_level): Likewise.
* semantics.c (register_constexpr_fundef): Likewise.
(cxx_eval_call_expression): Likewise.
* typeck2.c (abstract_virtuals_error_sfinae): Likewise.
2014-05-16 Paolo Carlini <>
PR c++/51640
* parser.c (cp_parser_diagnose_invalid_type_name): Early return
when cp_parser_lookup_name sets ambiguous_decls.
2014-05-15 Jason Merrill <>
* call.c (print_conversion_rejection): Use loc consistently.
2014-05-14 Paolo Carlini <>
* cp-tree.h (DIRECT_LIST_INIT_P): Add.
* call.c (convert_like_real, build_new_method_call_1): Use it.
* decl2.c (grokfield): Likewise.
* init.c (perform_member_init, build_aggr_init, expand_default_init,
build_new_1): Likewise.
* mangle.c (write_expression): Likewise.
* parser.c (cp_parser_late_parse_one_default_arg): Likewise.
2014-05-14 Jason Merrill <>
PR c++/20332
PR c++/21631
* call.c (reference_binding): Treat lvalue/rvalue mismatch and
dropped cv-quals as a bad conversion.
(convert_like_real) [ck_ref_bind]: Explain them.
(compare_ics): Check badness before stripping reference
bindings. Handle comparing bad reference bindings.
* typeck.c (comp_cv_qualification): Add overload that just takes
* cp-tree.h: Declare it.
* call.c (struct conversion_info): Rename 'from_type' to 'from'.
(arg_conversion_rejection, bad_arg_conversion_rejection)
(explicit_conversion_rejection, template_conversion_rejection): Adjust.
(add_function_candidate): Pass actual argument, rather than type, to
(print_conversion_rejection): Explain what's wrong with the conversion.
(print_z_candidates): Say "candidate:" before each candidate.
(splice_viable): Be strict if we see a viable or template candidate.
(build_user_type_conversion_1): Pass false to strict parameter.
(perform_overload_resolution, build_conditional_expr_1): Likewise.
(build_new_op_1, build_new_method_call_1): Likewise.
(build_op_call_1): Pass true to strict parameter.
2014-05-13 Jason Merrill <>
* call.c (print_error_for_call_failure): Say "no match" rather
than "ambiguous" if there were no strict matches.
(build_new_method_call_1): Likewise.
PR c++/61151
* semantics.c (is_this_parameter): Allow capture proxies too.
2014-05-12 Jason Merrill <>
* call.c (maybe_print_user_conv_context): New.
(convert_like_real): Use it. Print call context for bad
user-defined conversion.
(build_over_call): Print call context for bad 'this' conversion.
* call.c (convert_like_real): Use inform for identifying the
declaration point.
2014-05-12 Paolo Carlini <>
* cvt.c (cp_convert_to_pointer): Don't call error_at if
complain & tf_error is false.
* decl.c (make_unbound_class_template): Prefer inform for
"declared here"-type message.
2014-05-09 Momchil Velikov <>
PR c++/60463
PR c++/60755
* lambda.c (lambda_expr_this_capture): Add new parameter
add_capture_p controlling whether the functions will try to
capture 'this' via the default capture.
(maybe_resolve_dummy): Likewise.
* cp-tree.h: Adjust prototypes.
* call.c, semantics.c: Change callers of these functions.
* call.c (build_new_method_call_1): Use the actual 'this' that
would be potentially captured for the overload resolution, instead
of the dummy object.
2014-05-09 Paolo Carlini <>
* pt.c (convert_nontype_argument_function): Add tsubst_flags_t
(convert_nontype_argument): Adjust calls.
(coerce_template_parameter_pack): Add missing complain & tf_error
2014-05-09 Jason Merrill <>
DR 587
PR c++/51317
* call.c (build_conditional_expr_1, conditional_conversion): Handle
non-class lvalues and xvalues that differ only in cv-qualifiers.
DR 5
PR c++/60019
* call.c (build_user_type_conversion_1): The copy-init temporary
is cv-unqualified.
PR c++/58714
* tree.c (stabilize_expr): A stabilized prvalue is an xvalue.
PR c++/54348
* call.c (build_conditional_expr_1): If overload resolution finds
no match, just say "different types".
PR c++/32019
* call.c (build_conditional_expr_1): Improve ambiguity diagnostic.
PR c++/22434
* call.c (build_conditional_expr_1): Don't try to pool cv-quals
if we didn't find a conversion.
Don't accept a bad conversion too early.
2014-05-08 Paolo Carlini <>
PR c++/13981
* typeck.c (convert_for_assignment): Provide an inform for pointers
to incomplete class types.
2014-05-07 Paolo Carlini <>
PR c++/61083
* pt.c (convert_nontype_argument): Protect all the error calls
with complain & tf_error.
2014-05-07 Paolo Carlini <>
PR c++/61080
* pt.c (instantiate_decl): Avoid generating the body of a
deleted function.
2014-05-06 Paolo Carlini <>
PR c++/60999
* pt.c (maybe_begin_member_template_processing): Use
2014-05-06 Kenneth Zadeck <>
Mike Stump <>
Richard Sandiford <>
* call.c: Include wide-int.h.
(type_passed_as): Use tree_int_cst_lt instead of INT_CST_LT_UNSIGNED.
(convert_for_arg_passing): Likewise.
* class.c: Include wide-int.h.
(walk_subobject_offsets): Use tree_int_cst_lt instead of INT_CST_LT.
(end_of_class): Use tree_int_cst_lt instead of INT_CST_LT_UNSIGNED.
(include_empty_classes): Likewise
(layout_class_type): Use tree_int_cst_lt instead of INT_CST_LT.
* cvt.c: Include wide-int.h.
(ignore_overflows): Use wide_int_to_tree.
* decl.c: Include wide-int.h.
(check_array_designated_initializer): Use wide-int interfaces.
(compute_array_index_type): Use tree_int_cst_lt instead of INT_CST_LT.
(finish_enum_value_list): Use signop.
(build_enumerator): Use wide-int interfaces.
* init.c: Include wide-int.h.
(build_new_1): Use wide-int interfaces.
* mangle.c: Include wide-int.h.
(write_integer_cst): Use wide-int interfaces.
(write_array_type): Likewise.
* tree.c: Include wide-int.h.
(cp_tree_equal): Use tree_int_cst_equal.
* typeck2.c: Include wide-int.h.
(process_init_constructor_array): Use wide-int interfaces.
2014-05-03 Paolo Carlini <>
PR c++/58582
* decl.c (grokfndecl): Check duplicate_decls return value for
* pt.c (instantiate_decl): A deleted function is defined.
2014-05-02 Jason Merrill <>
* decl2.c (vague_linkage_p): Local statics have vague linkage.
PR c++/60992
* lambda.c (lambda_capture_field_type): Wrap anything dependent
other than 'this'.
(add_capture): Check for VLA before calling it.
* semantics.c (is_this_parameter): Accept any 'this' parameter, not
just the current one. Make non-static.
* cp-tree.h: Declare it.
* pt.c (tsubst_copy) [VAR_DECL]: Also build a new VAR_DECL if
the operand was static or constant.
2014-05-02 Marek Polacek <>
* typeck.c (maybe_warn_about_returning_address_of_local): Separate
warning_at calls.
2014-05-01 Marek Polacek <>
PR c/43395
* typeck.c (maybe_warn_about_returning_address_of_local): Distinguish
between label and variable when warning about returning local address.
2014-04-30 Jason Merrill <>
PR c++/60980
* init.c (build_value_init): Don't try to call an array constructor.
PR c++/60951
* typeck2.c (massage_init_elt): Use maybe_constant_init.
2014-04-30 Marek Polacek <>
* typeck.c (cp_build_binary_op): Call ubsan_instrument_division
even when SANITIZE_FLOAT_DIVIDE is on. Set doing_div_or_mod even
for non-integer types.
2014-04-29 Jason Merrill <>
DR 1351
Represent the unevaluated exception specification of an implicitly
declared or deleted function with a simple placeholder, not a list
of functions.
* except.c (unevaluated_noexcept_spec): New.
* class.c (deduce_noexcept_on_destructor): Use it.
* decl.c (check_redeclaration_exception_specification): Call
(duplicate_decls): Call it before merge_types.
(start_preparsed_function): Call maybe_instantiate_noexcept.
* decl2.c (mark_used): Call maybe_instantiate_noexcept earlier.
* init.c (get_nsdmi): Factor out of perform_member_init.
* method.c (process_subob_fn): Call maybe_instantiate_noexcept.
(walk_field_subobs): Consider NSDMI for EH spec.
(get_defaulted_eh_spec): New.
(implicitly_declare_fn): Use unevaluated_noexcept_spec.
(defaulted_late_check): Defer EH checking in non-template classes.
(after_nsdmi_defaulted_late_checks): New.
* parser.c (cp_parser_class_specifier_1): Use it.
(unparsed_classes): New macro.
* parser.h (cp_unparsed_functions_entry_d): Add classes field.
* pt.c (maybe_instantiate_noexcept): Use get_defaulted_eh_spec.
Remove list-of-functions handling.
* typeck2.c (merge_exception_specifiers): Remove list-of-functions
handling and FN parameter.
* typeck.c (merge_types): Adjust.
2014-04-28 Paolo Carlini <>
PR c++/59120
* parser.c (cp_parser_alias_declaration): Check return value of
2014-04-24 Jakub Jelinek <>
* parser.c (cp_parser_omp_atomic): Allow seq_cst before
atomic-clause, allow comma in between atomic-clause and
2014-04-24 Marc Glisse <>
PR libstdc++/43622
* rtti.c (emit_support_tinfos): Do not iterate on
registered_builtin_types (partial revert).
2014-04-23 Dinar Temirbulatov <>
PR c++/57958
* semantics.c (apply_deduced_return_type): Complete non-void type
before estimating whether the type is aggregate.
2014-04-22 Marc Glisse <>
PR libstdc++/43622
* rtti.c (emit_support_tinfo_1): New function, extracted from
(emit_support_tinfos): Call it and iterate on registered_builtin_types.
2014-04-22 Jakub Jelinek <>
PR c/59073
* parser.c (cp_parser_omp_parallel): If cp_parser_omp_for
fails, don't set OM_PARALLEL_COMBINED and return NULL.
2014-04-18 Jason Merrill <>
DR 1571
* call.c (reference_binding): Recurse on user-defined conversion.
PR c++/60872
* call.c (standard_conversion): Don't try to apply restrict to void.
2014-04-16 Marc Glisse <>
* decl.c (reshape_init_r): Handle a single element of vector type.
2014-04-16 Patrick Palka <>
PR c++/60765
* decl2.c (cplus_decl_attributes): Handle
pointer-to-member-function declarations.
2014-04-16 Patrick Palka <>
PR c++/60764
* call.c (build_user_type_coversion): Use build_dummy_object
to create the placeholder object for a constructor method call.
(build_special_member_call): Likewise.
(build_over_call): Check for the placeholder object with
(build_new_method_call_1): Likewise. Don't attempt to resolve
a dummy object for a constructor method call.
2014-04-16 Paul Pluzhnikov <>
PR c++/59295
* friend.c (add_friend, make_friend_class): Move repeated friend
warning under Wredundant_decls.
2014-04-15 Paolo Carlini <>
* decl.c (duplicate_decls): Remove redundant TYPE_NAME use.
* name-lookup.c (pushdecl_maybe_friend_1): Likewise.
(do_class_using_decl): Likewise.
* mangle.c (dump_substitution_candidates): Use TYPE_NAME_STRING.
2014-04-15 Jakub Jelinek <>
PR plugins/59335
* Make-lang.h (CP_PLUGIN_HEADERS): Add type-utils.h.
2014-04-14 Paolo Carlini <>
* cp-tree.h (TYPE_IDENTIFIER): Remove declaration.
2014-04-14 Paolo Carlini <>
* pt.c (mark_template_parm): Use template_parm_level_and_index.
2014-04-11 Jason Merrill <>
* parser.h (struct cp_token): Rename ambiguous_p to error_reported.
* parser.c: Adjust.
(cp_lexer_get_preprocessor_token): Always clear it.
(cp_parser_lambda_expression): Use it to avoid duplicate diagnostics.
DR 1467
PR c++/51747
* decl.c (reshape_init_r): Handle a single element of class type.
DR 1338
* decl.c (cxx_init_decl_processing): Set DECL_IS_MALLOC on
built-in operator new.
2014-04-11 Paolo Carlini <>
PR c++/58600
* name-lookup.c (parse_using_directive): Return early if the
attribs argument is error_mark_node; use get_attribute_name.
2014-04-11 Jason Merrill <>
DR 1030
PR c++/51253
* cp-tree.h (CALL_EXPR_LIST_INIT_P): New.
* call.c (struct z_candidate): Add flags field.
(add_candidate): Add flags parm.
(add_function_candidate, add_conv_candidate, build_builtin_candidate)
(add_template_candidate_real): Pass it.
(build_over_call): Set CALL_EXPR_LIST_INIT_P.
* tree.c (build_aggr_init_expr): Copy it.
* semantics.c (simplify_aggr_init_expr): Preevaluate args if it's set.
2014-04-10 Richard Biener <>
Jakub Jelinek <>
PR ipa/60761
* error.c (dump_decl) <case FUNCTION_DECL>: If
recurse on DECL_ABSTRACT_ORIGIN instead of printing
2014-04-09 Fabien Chêne <>
* pt.c (check_template_variable): Check for the return of pedwarn
before emitting a note.
* parser.c (cp_parser_lambda_introducer): Likewise.
2014-04-08 Paolo Carlini <>
PR c++/59115
* pt.c (process_template_parm): For an invalid non-type parameter
only set TREE_TYPE to error_mark_node.
(push_inline_template_parms_recursive, comp_template_parms,
redeclare_class_template, coerce_template_template_parm,
coerce_template_template_parms, unify): Use error_operand_p.
2014-04-08 Nathan Sidwell <>
* class.c (check_bases_and_members): Warn about non-virtual dtors
in public bases only. Check warn_ecpp before complaining about
non-polymorphic bases.
2014-04-04 Fabien Chêne <>
* decl.c (duplicate_decls): Check for the return of warning_at
before emitting a note.
(warn_misplaced_attr_for_class_type): Likewise.
(check_tag_decl): Likewise.
2014-04-04 Paolo Carlini <>
PR c++/58207
* semantics.c (sort_constexpr_mem_initializers): Robustify loop.
2014-04-04 Patrick Palka <>
PR c++/44613
* semantics.c (add_stmt): Set STATEMENT_LIST_HAS_LABEL.
* decl.c (cp_finish_decl): Create a new BIND_EXPR before
instantiating a variable-sized type.
PR c++/21113
* decl.c (decl_jump_unsafe): Consider variably-modified decls.
2014-04-04 Fabien Chêne <>
* class.c (find_abi_tags_r): Check for the return of warning
before emitting a note.
(one_inherited_ctor): Likewise.
2014-04-04 Fabien Chêne <>
* decl.c (duplicate_decls): Check for the return of permerror
before emitting a note.
2014-04-03 Nathan Sidwell <>
* class.c (accessible_nvdtor_p): New.
(check_bases): Don't check base destructor here ...
(check_bases_and_members): ... check them here. Trigger on
Wnon-virtual-dtor flag.
(finish_struct_1): Use accessible_nvdtor_p.
2014-04-01 Jason Merrill <>
* pt.c (process_partial_specialization): Say "not deducible"
rather than "not used". Use inform.
PR c++/60374
* pt.c (coerce_template_parms): Check that the pack expansion
pattern works with the first matching parameter.
2014-04-01 Fabien Chêne <>
* init.c (perform_member_init): Homogenize uninitialized
2014-04-01 Jason Merrill <>
PR c++/60708
* call.c (build_array_conv): Call complete_type.
PR c++/60713
* typeck2.c (PICFLAG_SIDE_EFFECTS): New.
(picflag_from_initializer): Return it.
(process_init_constructor): Handle it.
PR c++/60642
* decl2.c (is_late_template_attribute): Don't defer abi_tag.
* mangle.c (write_unqualified_name): Fix abi_tag on templates.
* pt.c (get_template_info): Handle NAMESPACE_DECL.
(most_general_template): Handle more kinds of template.
* tree.c (handle_abi_tag_attribute): Ignore abi_tag on template
instantiations and specializations.
2014-03-31 Patrick Palka <>
PR c++/44859
* typeck.c (maybe_warn_about_returning_address_of_local): Unwrap
2014-03-29 Adam Butcher <>
PR c++/60626
* parser.c (cp_parser_init_declarator): Handle erroneous generic type
usage in non-functions with pushed scope.
2014-03-28 Adam Butcher <>
PR c++/60573
* name-lookup.h (cp_binding_level): New transient field defining_class_p
to indicate whether a scope is in the process of defining a class.
* semantics.c (begin_class_definition): Set defining_class_p.
* name-lookup.c (leave_scope): Reset defining_class_p.
* parser.c (synthesize_implicit_template_parm): Use cp_binding_level::
defining_class_p rather than TYPE_BEING_DEFINED as the predicate for
unwinding to class-defining scope to handle the erroneous definition of
a generic function of an arbitrarily nested class within an enclosing
2014-03-26 Fabien Chêne <>
PR c++/52369
* method.c (walk_field_subobs): Improve the diagnostic
locations for both REFERENCE_TYPEs and non-static const members.
* init.c (diagnose_uninitialized_cst_or_ref_member): Use %q#D
instead of %qD to be consistent with the c++11 diagnostic.
2014-03-25 Jason Merrill <>
PR c++/60566
PR c++/58678
* class.c (build_vtbl_initializer): Handle abstract dtors here.
* search.c (get_pure_virtuals): Not here.
PR c++/60375
* parser.c (cp_parser_lambda_expression): Don't parse the body of
a lambda in unevaluated context.
PR c++/60628
* decl.c (create_array_type_for_decl): Complain about array of auto.
2014-03-25 Jakub Jelinek <>
PR c++/60331
* semantics.c (potential_constant_expression_1): Handle
2014-03-24 Adam Butcher <>
PR c++/60627
* parser.c (cp_parser_parameter_declaration_clause): Prevent 'auto' from
introducing an implicit function template parameter within an explicit
2014-03-22 Jason Merrill <>
PR c++/60574
* decl.c (grokdeclarator): Change permerror about 'virtual auto'
to error.
2014-03-21 Paolo Carlini <>
PR c++/60384
* name-lookup.c (push_class_level_binding_1): Check identifier_p
on the name argument.
2014-03-20 Jakub Jelinek <>
PR c++/60572
* init.c (build_zero_init_1): Ignore fields with error_mark_node
2014-03-19 Paolo Carlini <>
PR c++/51474
* call.c (build_new_method_call_1): Handle pure virtuals called by
NSDMIs too.
2014-03-17 Adam Butcher <>
PR c++/60390
* parser.c (cp_parser_member_declaration): Don't allow
finish_fully_implicit_template to consider friend declarations to be
class member templates.
(synthesize_implicit_template_parm): Handling winding back through class
scope to the class being defined in order to inject a template argument
PR c++/60391
* parser.c (cp_parser_skip_to_end_of_block_or_statement): Unwind generic
function scope as per cp_parser_skip_to_end_of_statement.
2014-03-17 Paolo Carlini <>
PR c++/59571
* typeck2.c (check_narrowing): Use fold_non_dependent_expr_sfinae.
2014-03-14 Jason Merrill <>
PR c++/60532
PR c++/58678
* search.c (get_pure_virtuals): Handle abstract dtor here.
(dfs_get_pure_virtuals): Not here.
PR c++/58678
* search.c (dfs_get_pure_virtuals): Treat the destructor of an
abstract class as pure.
2014-03-13 Paolo Carlini <>
PR c++/60383
* pt.c (maybe_process_partial_specialization): Check return value
of check_specialization_namespace.
2014-03-13 Paolo Carlini <>
PR c++/60254
* semantics.c (finish_static_assert): Call cxx_constant_value only
if require_potential_rvalue_constant_expression returns true.
2014-03-11 Paolo Carlini <>
PR c++/60389
* method.c (get_inherited_ctor): New.
* cp-tree.h (get_inherited_ctor): Declare it.
* semantics.c (is_valid_constexpr_fn): Use it.
2014-03-10 Jason Merrill <>
PR c++/60367
* call.c (convert_default_arg): Remove special handling for
PR c++/53492
* parser.c (cp_parser_class_head): Also check PRIMARY_TEMPLATE_P
when deciding whether to call push_template_decl for a member class.
* pt.c (push_template_decl_real): Return after wrong levels error.
2014-03-08 Adam Butcher <>
PR c++/60033
* pt.c (tsubst_copy): When retrieving a capture pack from a generic
lambda, remove the lambda's own template argument list prior to fetching
the specialization.
PR c++/60393
* parser.c (cp_parser_parameter_declaration_clause): Move generic
function template unwinding on error into a more general location, ...
(cp_parser_skip_to_end_of_statement): ... here.
2014-03-07 Jason Merrill <>
* (check_g++_parallelize): Split dg.exp.
* parser.c (cp_parser_type_id_1): Only allow 'auto' in C++1y if
we're in a trailing return type.
* typeck.c (comp_template_parms_position): 'auto' and
'decltype(auto)' are different from real template parms.
* parser.c (cp_parser_using_declaration): Consume the semicolon
after bare parameter pack error.
* cp-tree.h (REF_PARENTHESIZED_P): New.
* semantics.c (force_paren_expr): Set it.
* pt.c (do_auto_deduction): Check it.
(tsubst) [COMPONENT_REF]: Copy it.
* typeck.c (maybe_warn_about_useless_cast): Don't strip dereference.
* decl.c (create_array_type_for_decl): Only warn about invalid
C++1y VLA if flag_iso or warn_vla>0.
(grokdeclarator): Likewise.
* pt.c (tsubst): Likewise.
* semantics.c (finish_decltype_type): Likewise.
* typeck.c (cxx_sizeof_or_alignof_type): Likewise.
(cp_build_addr_expr_1): Likewise.
* init.c (build_new_1): Improve diagnostics.
2014-03-07 Paolo Carlini <>
PR c++/58609
* decl.c (check_initializer): Return NULL_TREE after error;
consistently use inform.
2014-03-07 Paolo Carlini <>
* decl.c (check_initializer): Remove dead code.
2014-03-06 Marek Polacek <>
PR c/60197
* typeck.c (check_return_expr): Call contains_cilk_spawn_stmt instead
of checking tree code.
2014-03-06 Paolo Carlini <>
* parser.c (cp_lexer_set_source_position): New.
(cp_parser_mem_initializer): Use it.
(cp_parser_postfix_open_square_expression): Likewise.
(cp_parser_parenthesized_expression_list): Likewise.
(cp_parser_new_initializer): Likewise.
(cp_parser_jump_statement): Likewise.
(cp_parser_initializer): Likewise.
(cp_parser_functional_cast): Likewise.
2014-03-05 Jason Merrill <>
PR c++/60409
* semantics.c (force_paren_expr): Only add a PAREN_EXPR to a
dependent expression.
PR c++/60361
* parser.c (cp_parser_template_id): Don't set up a CPP_TEMPLATE_ID
if re-parsing might succeed.
* semantics.c (finish_id_expression): Use of a parameter outside
the function body is a parse error.
* parser.c (cp_parser_mem_initializer): Set input_location
properly for init-list warning.
(cp_parser_postfix_open_square_expression): Likewise.
(cp_parser_parenthesized_expression_list): Likewise.
(cp_parser_new_initializer): Likewise.
(cp_parser_jump_statement): Likewise.
(cp_parser_initializer): Likewise.
(cp_parser_functional_cast): Likewise.
2014-03-04 Jason Merrill <>
PR c++/60417
* typeck2.c (process_init_constructor_record): Set
CONSTRUCTOR_IS_DIRECT_INIT on {} for omitted initializers.
PR c++/60415
PR c++/54359
* parser.c (cp_parser_direct_declarator): Set declarator to
cp_error_declarator on invalid qualified-id.
2014-03-04 Paolo Carlini <>
PR c++/60376
* parser.c (cp_parser_using_declaration): Early return when
cp_parser_nested_name_specifier errors out.
2014-03-01 Adam Butcher <>
PR c++/60377
* parser.c (cp_parser_parameter_declaration_clause): Unwind generic
function scope on parse error in function parameter list.
2014-03-01 Paolo Carlini <>
* method.c (implicitly_declare_fn): Remove redundant
* semantics.c (is_instantiation_of_constexpr): Likewise.
* error.c (dump_function_decl): Likewise.
2014-03-01 Jason Merrill <>
PR c++/60379
* semantics.c (begin_maybe_infinite_loop): Use
2014-02-28 Jason Merrill <>
PR c++/58845
* typeck.c (cp_build_binary_op): Sorry on vector&&vector.
2014-02-28 Paolo Carlini <>
PR c++/58610
* call.c (print_z_candidate): Remove STRIP_TEMPLATE use.
* lambda.c (maybe_add_lambda_conv_op): Likewise.
2014-02-27 Paolo Carlini <>
PR c++/60253
* call.c (convert_arg_to_ellipsis): Return error_mark_node after
2014-02-27 Jason Merrill <>
PR c++/60353
PR c++/55877
* decl2.c (tentative_decl_linkage): Don't mess with functions that
are not yet defined.
2014-02-26 Jason Merrill <>
PR c++/60347
PR lto/53808
* class.c (clone_function_decl): Don't note_vague_linkage_fn.
* init.c (build_vtbl_address): Do it here.
PR c++/59231
PR c++/11586
PR c++/14710
PR c++/57132
* pt.c (struct warning_sentinel): New.
(tsubst_copy_and_build): Use it instead of
* typeck.c (maybe_warn_about_useless_cast): Remove
c_inhibit_evaluation_warnings check.
PR c++/54440
* pt.c (get_template_parm_index): New.
(fixed_parameter_pack_p_1, fixed_parameter_pack_p): New.
(process_template_parm): Allow bare packs in template template
parm template parms.
(coerce_template_parameter_pack): Handle fixed template template
parm packs and fixed packs not at the end of the parm list.
(coerce_template_parms): Handle template parm packs not at the end
of the parm list.
(gen_elem_of_pack_expansion_instantiation): Handle a decl expansion.
PR c++/60182
* pt.c (unify): Ignore alias templates when deducing a template
template parameter.
PR c++/60345
DR 1571
* call.c (reference_binding): Recurse on user-defined conversion.
(convert_like_real) [ck_ref_bind]: Explain cv-qual mismatch.
2014-02-25 Jason Merrill <>
DR 1571
* call.c (reference_binding): Recurse on user-defined conversion.
(convert_like_real) [ck_ref_bind]: Explain cv-qual mismatch.
* call.c (print_conversion_rejection): Handle n_arg of -2.
(build_user_type_conversion_1): Pass it.
PR c++/55877
* decl2.c (no_linkage_error): Handle C++98 semantics.
(reset_type_linkage): Move from decl.c.
(reset_type_linkage_1, reset_type_linkage_2, bt_reset_linkage_1)
(bt_reset_linkage_2, reset_decl_linkage): New.
(tentative_decl_linkage): Factor out of expand_or_defer_fn_1.
(cp_write_global_declarations): Move condition into no_linkage_error.
* decl.c (grokfndecl, grokvardecl): Use no_linkage_error.
* semantics.c (expand_or_defer_fn_1): Factor out
* cp-tree.h: Adjust.
* decl2.c (finish_static_data_member_decl): Diagnose static data
member in unnamed class.
* class.c (finish_struct_anon_r): Avoid redundant diagnostic.
PR lto/53808
* class.c (clone_function_decl): Call note_vague_linkage_fn for
defaulted virtual dtor.
DR 1286
PR c++/60328
* pt.c (get_underlying_template): Fix equivalence calculation.
2014-02-25 Adam Butcher <>
PR c++/60311
* parser.c (function_being_declared_is_template_p): Return false when
processing a template parameter list.
(cp_parser_parameter_declaration_clause): Don't set
auto_is_implicit_function_template_parm_p when processing a
template parameter list.
* parser.c (synthesize_implicit_template_parm): Inject new template
argument list appropriately when a generic member function
of a class template is declared out-of-line.
PR c++/60065
* parser.c (cp_parser_direct_declarator): Don't save and
restore num_template_parameter_lists around call to
(function_being_declared_is_template_p): New predicate.
(cp_parser_parameter_declaration_list): Use
function_being_declared_is_template_p as predicate for
inspecting current function template parameter list length
rather than num_template_parameter_lists.
2014-02-24 Jason Merrill <>
PR c++/60146
* pt.c (tsubst_omp_for_iterator): Don't let substitution of the
DECL_EXPR initialize a non-class iterator.
PR c++/60312
* parser.c (cp_parser_template_type_arg): Check for invalid 'auto'.
2014-02-21 Jason Merrill <>
PR c++/58170
* parser.c (cp_parser_type_name): Always check dependency.
(cp_parser_type_specifier_seq): Call
PR c++/60108
* semantics.c (expand_or_defer_fn_1): Check DECL_DEFAULTED_FN.
PR c++/60185
* parser.c (cp_parser_default_argument): Clear
current_class_ptr/current_class_ref like tsubst_default_argument.
PR c++/60252
* lambda.c (maybe_resolve_dummy): Check lambda_function rather
than current_binding_level.
PR c++/60186
* typeck2.c (massage_init_elt): Call fold_non_dependent_expr_sfinae.
PR c++/60187
* parser.c (cp_parser_enum_specifier): Call
PR c++/59347
* pt.c (tsubst_decl) [TYPE_DECL]: Don't try to instantiate an
erroneous typedef.
PR c++/60241
* pt.c (lookup_template_class_1): Update DECL_TEMPLATE_INSTANTIATIONS
of the partial instantiation, not the most general template.
(maybe_process_partial_specialization): Reassign everything on
that list.
PR c++/60216
* pt.c (register_specialization): Copy DECL_DELETED_FN to clones.
(check_explicit_specialization): Don't clone.
PR c++/60219
* pt.c (coerce_template_parms): Bail if argument packing fails.
PR c++/60224
* decl.c (cp_complete_array_type, maybe_deduce_size_from_array_init):
Don't get confused by a CONSTRUCTOR that already has a type.
PR c++/60227
* call.c (build_array_conv): Don't crash on VLA.
PR c++/60248
* mangle.c (mangle_decl): Don't make an alias for a TYPE_DECL.
PR c++/60252
* lambda.c (maybe_resolve_dummy): Don't try to capture this
in declaration context.
DR 1591
PR c++/60051
* pt.c (unify): Only unify if deducible. Handle 0-length list.
PR c++/60250
* parser.c (cp_parser_direct_declarator): Don't wrap a
type-dependent expression in a NOP_EXPR.
PR c++/60251
* lambda.c (is_normal_capture_proxy): Handle VLA capture.
PR c++/60167
PR c++/60222
PR c++/58606
* parser.c (cp_parser_template_argument): Restore dereference.
* pt.c (template_parm_to_arg): Dereference non-pack expansions too.
(process_partial_specialization): Handle deref.
(unify): Likewise.
2014-02-21 Adam Butcher <>
PR c++/60052
PR c++/60053
* parser.c (cp_parser_parameter_declaration_list): Correctly reset
implicit_template_scope upon leaving an out-of-line generic member
function definition.
2014-02-20 Kai Tietz <>
PR c++/58873
* parser.c (cp_parser_functional_cast): Treat NULL_TREE
valued type argument as error_mark_node.
PR c++/58835
* semantics.c (finish_fname): Handle error_mark_node.
2014-02-19 Jason Merrill <>
PR c++/60046
* pt.c (maybe_instantiate_noexcept): Don't instantiate exception
spec from template context.
2014-02-19 Jakub Jelinek <>
PR debug/56563
* cp-objcp-common.c (cp_function_decl_explicit_p): Remove
FUNCTION_FIRST_USER_PARMTYPE (decl) != void_list_node check.
PR c++/60267
* pt.c (tsubst_expr): Handle ANNOTATE_EXPR.
2014-02-18 Paolo Carlini <>
PR c++/60225
* semantics.c (ensure_literal_type_for_constexpr_object): Use
2014-02-18 Paolo Carlini <>
PR c++/60215
* semantics.c (cxx_eval_constant_expression, [COMPONENT_REF]):
During error recovery allow_non_constant may be false.
2014-02-18 Adam Butcher <>
PR c++/60190
* parser.c (cp_parser_lambda_declarator_opt): Pop template parameter
scope whenever a template parameter list has been started, independent
of whether the function call operator was well-formed or not.
PR c++/60064
* parser.c (cp_parser_member_declaration): Pop fully implicit template
scope for generic friend declarations as well as for non-friends.
2014-02-12 Paolo Carlini <>
PR c++/60047
* method.c (implicitly_declare_fn): A constructor of a class with
virtual base classes isn't constexpr (7.1.5p4).
2014-02-05 Jan Hubicka <
* parser.c (synthesize_implicit_template_parm): Use grow_tree_vec.
2014-02-05 Jakub Jelinek <>
PR c++/58703
* parser.c (cp_parser_omp_declare_reduction): Save and free
2014-02-03 Marc Glisse <>
PR c++/53017
PR c++/59211
* tree.c (handle_init_priority_attribute): Call default_conversion on
the attribute argument.
2014-02-03 Paolo Carlini <>
PR c++/58871
* method.c (synthesized_method_walk): If vbases is non-null but
is_empty is true, likewise don't worry about the virtual bases.
2014-02-01 Paolo Carlini <>
PR c++/51219
* typeck2.c (process_init_constructor_record): Just skip unnamed
2014-01-31 Jason Merrill <>
PR c++/59469
* pt.c (mark_decl_instantiated): Call mark_needed.
PR c++/58672
* decl2.c (handle_tls_init): Handle null init fn.
PR c++/55800
* decl2.c (get_tls_init_fn): Copy DECL_EXTERNAL from the variable.
2014-01-31 Paolo Carlini <>
PR c++/59082
* class.c (build_vfield_ref): Early return error_mark_node if
TYPE_VFIELD (type) is null.
(build_base_path): Check return value of build_vfield_ref.
2014-01-31 Jason Merrill <>
PR c++/59646
* call.c (convert_like_real) [ck_aggr]: Set TARGET_EXPR_LIST_INIT_P.
[ck_list]: Check for error_mark_node.
(build_aggr_conv): Set LOOKUP_NO_NARROWING and check_narrowing.
PR c++/57043
* pt.c (fn_type_unification): Don't do DEDUCE_EXACT check
during partial ordering.
2014-01-31 Marek Polacek <>
PR c/59963
* typeck.c (build_function_call_vec): Add dummy arg_loc parameter.
2014-01-30 Jason Merrill <>
PR c++/57899
* cp-tree.h (struct saved_scope): Add x_local_specializations.
(local_specializations): New macro.
* pt.c (local_specializations): Remove variable.
2014-01-30 Richard Sandiford <>
PR c++/58708
* parser.c (make_string_pack): Use double_int::from_buffer.
2014-01-30 Marek Polacek <>
PR c/59940
* typeck.c (build_ptrmemfunc1): Call convert_and_check with
* cvt.c (cp_convert_and_check): Call warnings_for_convert_and_check
with input_location.
* call.c (build_conditional_expr_1): Call unsafe_conversion_p with
loc parameter.
2014-01-30 Paolo Carlini <>
PR c++/58843
* typeck.c (lookup_destructor): Check dtor_type for error_mark_node.
2014-01-30 Paolo Carlini <>
PR c++/58649
* pt.c (lookup_template_class_1): Check start_enum return value
for error_mark_node.
2014-01-30 Paolo Carlini <>
* decl.c (duplicate_decls, typename_hash, typename_compare):
* error.c (dump_type): Likewise.
* mangle.c (dump_substitution_candidates): Likewise.
2014-01-30 Jason Merrill <>
PR c++/59633
* decl2.c (attributes_naming_typedef_ok): New.
* cp-tree.h: Declare it.
* decl.c (grokdeclarator): Check it.
* tree.c (no_linkage_check): Handle VECTOR_TYPE.
2014-01-29 Jason Merrill <>
PR c++/59707
* call.c (add_builtin_candidate): Catch dependent types.
PR c++/59989
* pt.c (expand_template_argument_pack): Correct
non_default_args_count calculation.
PR c++/58466
* pt.c (unify_pack_expansion): Call expand_template_argument_pack.
PR c++/59956
* friend.c (do_friend): Pass the TEMPLATE_DECL to add_friend if we
have a friend template in a class template.
* pt.c (tsubst_friend_function): Look through it.
(push_template_decl_real): A friend member template is
2014-01-29 Paolo Carlini <>
PR c++/58846
* decl.c (get_dso_handle_node): Don't crash if dso_handle_node
== error_mark_node.
2014-01-29 Paolo Carlini <>
PR c++/58674
* pt.c (instantiate_template_1): Check for error_mark_node the second
argument too.
2014-01-29 Jason Merrill <>
PR c++/59916
* optimize.c (maybe_thunk_body): Build a RETURN_EXPR for
cdtor_returns_this case.
PR c++/59315
* decl.c (cxx_maybe_build_cleanup): Call mark_used.
2014-01-29 Paolo Carlini <>
PR c++/58702
* semantics.c (finish_omp_reduction_clause): Check type for
2014-01-28 Jason Merrill <>
PR c++/59791
* pt.c (tsubst_decl) [VAR_DECL]: Allow in unevaluated context.
(tsubst_copy): Use it if lookup fails.
PR c++/59818
* pt.c (tsubst_function_type): Make sure we keep the same function
PR c++/58701
* semantics.c (build_anon_member_initialization): Stop walking
when we run out of COMPONENT_REFs.
PR c++/58632
* decl.c (lookup_and_check_tag): Ignore template parameters if
scope == ts_current.
* pt.c (check_template_shadow): Don't complain about the injected
class name.
* decl.c (duplicate_decls): Tweak.
PR c++/53756
* mangle.c (write_unqualified_name): Handle operator auto.
2014-01-27 Jason Merrill <>
PR c++/59823
Core DR 1138
* call.c (reference_binding): Pass LOOKUP_NO_TEMP_BIND for
list-initialization. A conversion to rvalue ref that involves
an lvalue-rvalue conversion is bad.
(convert_like_real): Give helpful error message.
PR c++/54652
* decl.c (duplicate_decls): Always use oldtype for TYPE_DECL.
PR c++/58504
* pt.c (tsubst_copy_and_build) [TRAIT_EXPR]: Use tsubst for
PR c++/58606
* pt.c (template_parm_to_arg): Call convert_from_reference.
(tsubst_template_arg): Don't strip reference refs.
PR c++/58639
* call.c (build_aggr_conv): Reject value-initialization of reference.
PR c++/58812
PR c++/58651
* call.c (convert_like_real): Give helpful error about excess braces
for ck_rvalue of scalar type.
Core DR 1288
* call.c (reference_binding): Only elide braces if the single
element is reference-related.
PR c++/58814
* typeck.c (cp_build_modify_expr): Make the RHS an rvalue before
PR c++/58837
* typeck.c (cp_truthvalue_conversion): Use explicit comparison for
PR c++/59097
* decl.c (compute_array_index_type): Don't call
maybe_constant_value for a non-integral expression.
2014-01-24 Balaji V. Iyer <>
* call.c (magic_varargs_p): Replaced flag_enable_cilkplus with
* cp-gimplify.c (cp_genericize): Likewise.
* decl.c (grokfndecl): Likewise.
* parser.c (cp_parser_postfix_expression): Likewise.
(cp_parser_postfix_open_square_expression): Likewise.
(cp_parser_direct_declarator): Likewise.
(is_cilkplus_vector_p): Likewise.
(cp_parser_omp_clause_name): Likewise.
(cp_parser_omp_all_clauses): Likewise.
* pt.c (apply_late_template_attributes): Likewise.
* typeck.c (cp_build_array_ref): Likewise.
(cp_build_compound_expr): Likewise.
(check_return_expr): Likewise.
2014-01-24 Jason Merrill <>
PR c++/58550
* decl.c (grokdeclarator): Turn pedwarn about auto return type in
c++11 into error.
PR c++/59886
PR c++/59659
* typeck2.c (process_init_constructor_array): Don't create
2014-01-24 Jakub Jelinek <>
* typeck2.c (split_nonconstant_init_1): Fix num_split_elts
handling for RANGE_ARRAY case.
2014-01-24 Paolo Carlini <>
PR c++/57524
* name-lookup.c (push_using_directive): Use timevar_cond_start.
2014-01-23 Marek Polacek <>
PR c/59846
* typeck.c (cp_build_binary_op): Pass location to shorten_compare.
2014-01-23 Marek Polacek <>
PR c/58346
* typeck.c (pointer_diff): Give an error on arithmetic on pointer to
an empty aggregate.
2014-01-23 Jason Merrill <>
PR c++/55189
* cp-tree.h (struct language_function): Add infinite_loop and
(current_function_infinite_loop): New.
* semantics.c (begin_maybe_infinite_loop, end_maybe_infinite_loop)
(break_maybe_infinite_loop): New.
(finish_while_stmt_cond, finish_while_stmt, begin_do_stmt)
(finish_do_stmt, finish_for_cond, finish_for_stmt)
(begin_range_for_stmt): Use them.
* decl.c (finish_function): Don't warn about missing return
if current_function_infinite_loop.
* pt.c (instantiate_decl): Copy current_function_infinite_loop.
* parser.c (cp_parser_jump_statement): Call break_maybe_infinite_loop.
* call.c (build_op_delete_call): Use make_tree_vector and
2014-01-23 Paolo Carlini <>
PR c++/58980
* parser.c (cp_parser_enum_specifier): Handle TYPENAME_TYPE as
2014-01-23 Balaji V. Iyer <>
* parser.c (cp_parser_direct_declarator): When Cilk Plus is enabled
see if there is an attribute after function decl. If so, then
parse them now.
(cp_parser_late_return_type_opt): Handle parsing of Cilk Plus SIMD
enabled function late parsing.
(cp_parser_gnu_attribute_list): Parse all the tokens for the vector
attribute for a SIMD-enabled function.
(cp_parser_omp_all_clauses): Skip parsing to the end of pragma when
the function is used by SIMD-enabled function (indicated by NULL
pragma token). Added 3 new clauses: PRAGMA_CILK_CLAUSE_MASK,
(cp_parser_cilk_simd_vectorlength): Modified this function to handle
vectorlength clause in SIMD-enabled function and #pragma SIMD's
vectorlength clause. Added a new bool parameter to differentiate
between the two.
(cp_parser_cilk_simd_fn_vector_attrs): New function.
(is_cilkplus_vector_p): Likewise.
(cp_parser_late_parsing_elem_fn_info): Likewise.
(cp_parser_omp_clause_name): Added a check for "mask", "nomask"
and "vectorlength" clauses when Cilk Plus is enabled.
(cp_parser_omp_clause_linear): Added a new parameter of type bool
and emit a sorry message when step size is a parameter.
* parser.h (cp_parser::cilk_simd_fn_info): New field.
* decl.c (grokfndecl): Added flag_enable_cilkplus along with
* pt.c (apply_late_template_attributes): Likewise.
2014-01-23 Jakub Jelinek <>
PR middle-end/58809
* semantics.c (finish_omp_reduction_clause): Reject
2014-01-22 Ville Voutilainen <>
PR c++/59482
* parser.c (cp_parser_class_head): Push the class before parsing
the base-clause, pop after it.
2014-01-20 Eric Botcazou <>
* decl2.c (cpp_check): Revert prototype change.
2014-01-17 Paolo Carlini <>
PR c++/59270
PR c++/58811
* init.c (build_value_init_noctor): Don't pass error_mark_node to
2014-01-17 Paolo Carlini <>
PR c++/59269
* init.c (build_value_init_noctor): Assert !TYPE_HAS_COMPLEX_DFLT
only when errorcount == 0.
2014-01-17 Marek Polacek <>
PR c++/59838
* cvt.c (ocp_convert): Don't segfault on non-existing
2014-01-16 Jason Merrill <>
PR c++/59821
* tree.c (bot_manip): Update the location of builtin_LINE and
builtin_FILE calls.
2014-01-14 Jason Merrill <>
PR c++/59659
* typeck2.c (massage_init_elt): New.
(process_init_constructor_union): Use it.
(process_init_constructor_array): Use it. Use RANGE_EXPR.
(split_nonconstant_init_1): Handle it.
* semantics.c (cxx_eval_vec_init_1): Use force_rvalue.
2014-01-09 Balaji V. Iyer <>
PR c++/59631
* parser.c (cp_parser_postfix_expression): Added a new if-statement
and replaced an existing if-statement with else-if statement.
Changed an existing error message wording to match the one from the C
2014-01-08 Jason Merrill <>
PR c++/59614
* class.c (abi_tag_data): Add tags field.
(check_abi_tags): Initialize it.
(find_abi_tags_r): Support collecting missing tags.
(mark_type_abi_tags): Don't look at template args.
(inherit_targ_abi_tags): New.
(check_bases_and_members): Use it.
* cp-tree.h (ABI_TAG_IMPLICIT): New.
* mangle.c (write_abi_tags): Check it.
2014-01-07 Jason Merrill <>
PR c++/58856
* pt.c (num_innermost_template_parms): New.
(get_underlying_template): Use it.
PR c++/58965
* mangle.c (write_guarded_var_name): Handle null DECL_NAME.
2014-01-07 Paolo Carlini <>
* semantics.c (trait_expr_value, [CPTK_IS_BASE_OF]): Implement
the letter of 20.11.6 about Base and Derived naming the same
class type modulo cv-qualifiers.
2014-01-06 Adam Butcher <>
PR c++/59635
* lambda.c (maybe_add_lambda_conv_op): Handle marking conversion
function as unimplemented for generic lambdas with varargs.
PR c++/59636
* parser.c (cp_parser_template_parameter): Early out with
error_mark_node if parameter declaration was not parsed.
PR c++/59629
* parser.c (cp_parser_lambda_expression): Save/reset/restore
auto_is_implicit_function_template_parm_p around lambda body.
PR c++/59638
* parser.c (cp_parser_init_declarator): Undo fully implicit
template parameter list when declarator is not a function.
2014-01-03 Marc Glisse <>
PR c++/58950
* cvt.c (convert_to_void): Handle VEC_PERM_EXPR and VEC_COND_EXPR.
2014-01-03 Tobias Burnus <>
PR c++/58567
* pt.c (tsubst_omp_for_iterator): Early return for error_mark_node.
2014-01-03 Paolo Carlini <>
Core DR 1442
PR c++/59165
* parser.c (cp_parser_perform_range_for_lookup): Don't pass true
as include_std to perform_koenig_lookup.
(cp_parser_postfix_expression): Adjust.
* pt.c (tsubst_copy_and_build): Likewise.
* semantics.c (perform_koenig_lookup): Remove bool parameter.
(omp_reduction_lookup): Adjust.
* name-lookup.c (lookup_arg_dependent_1): Remove bool parameter.
(lookup_arg_dependent): Likewise.
(lookup_function_nonclass): Adjust.
* name-lookup.h: Adjust declaration.
* cp-tree.h: Likewise.
2014-01-02 Marc Glisse <>
PR c++/59087
* parser.c (cp_parser_userdef_numeric_literal): Mention
-fext-numeric-literals in the message.
2014-01-02 Marc Glisse <>
PR c++/59641
* call.c (build_conditional_expr_1): Check the return value of
2014-01-02 Marc Glisse <>
* call.c (convert_like_real): Check complain.
2014-01-02 Marc Glisse <>
PR c++/59378
* typeck.c (build_x_vec_perm_expr): Handle non-dependent arguments
in templates.
2014-01-02 Richard Sandiford <>
Update copyright years
2014-01-02 Richard Sandiford <>
* cp-array-notation.c, cp-cilkplus.c, vtable-class-hierarchy.c: Use
the standard form for the copyright notice.
Copyright (C) 2014 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.