blob: 83fd123a75d00c7535d46b078f80421c6242be7b [file] [log] [blame]
2008-12-31 Jakub Jelinek <>
PR c++/38647
* parser.c (cp_parser_primary_expression) <case RID_FUNCTION_NAME>:
Return error_mark_node if cp_parser_non_integral_constant_expression
returns true.
PR c++/38640
* semantics.c (finish_decltype_type): Handle TEMPLATE_PARM_INDEX.
2008-12-29 Jakub Jelinek <>
PR c++/38635
* parser.c (cp_parser_condition): Use cp_parser_require
instead of cp_lexer_consume_token to consume =.
PR c++/38637
* decl.c (start_enum): If enumtype is error_mark_node, exit early.
2008-12-28 Jakub Jelinek <>
PR c++/38650
* semantics.c (finish_omp_for): Don't add CLEANUP_POINT_EXPR
around volatile iteration var in condition and/or increment
2008-12-27 Jakub Jelinek <>
PR c++/38639
* pt.c (tsubst_omp_for_iterator): RECUR on whole init_expr instead of
just its type.
2008-12-21 Jason Merrill <>
PR c++/38597
* name-lookup.c (arg_assoc_type): Handle DECLTYPE_TYPE.
2008-12-20 Jakub Jelinek <>
Manuel López-Ibáñez <>
PR c++/36921
* c-common.c (warn_about_parentheses): Remove ARG_UNUSED from
arg_left. Don't warn about X<=Y<=Z if comparison's type isn't
2008-12-19 Jakub Jelinek <>
PR c++/38577
* call.c (build_new_method_call): Handle call being COMPOUND_EXPR
2008-12-18 Jakub Jelinek <>
PR c++/38427
* init.c (perform_member_init): For value-initialized
references call permerror instead of warning and don't emit any
2008-12-18 Jason Merrill <>
PR c++/38485
* parser.c (cp_parser_token_starts_cast_expression): An EOF
can't start a cast-expression.
2008-12-17 Jason Merrill <>
* semantics.c (describable_type): New function.
(finish_decltype_type): Use it for dependent exprs.
* cp-tree.h: Declare it.
* mangle.c (write_type) [DECLTYPE_TYPE]: Set skip_evaluation.
(write_expression): If skip_evaluation, use type stubs.
* tree.c (cp_tree_equal): Handle PARM_DECLs from different
declarations of a function.
* init.c (build_new): Do auto deduction if type is describable.
* decl.c (cp_finish_decl): Likewise.
* parser.c (cp_parser_omp_for_loop): Likewise.
2008-12-10 Jason Merrill <>
PR c++/35319
* mangle.c (write_builtin_type): Add mangling for decimal floating
point and fixed point types.
(write_type): Pass FIXED_POINT_TYPE along.
2008-12-09 Mark Mitchell <>
PR c++/37971
* class.c (resolve_address_of_overloaded_function): Check
accessibility of member functions unless FLAGS indicates
* call.c (standard_conversion): Adjust flags passed to
(convert_default_arg): Do not perform access checks.
* cp-tree.h (tsubst_flags_t): Add tf_no_access_control.
2008-12-08 Steve Ellcey <>
* decl2.c (mark_used): Remove assemble_external call.
2008-12-08 Dodji Seketeli <>
PR debug/38390
* name-lookup.c (kept_level_p): Don't forget the case of levels
having using directives.
2008-12-08 Richard Henderson <>
PR 38240
* class.c (finish_struct_bits): Use SET_TYPE_MODE.
* decl.c (record_unknown_type): Likewise.
(start_enum, finish_enum): Likewise.
2008-12-05 Jakub Jelinek <>
PR c++/35336
* error.c (dump_expr): Handle BIT_FIELD_REF.
2008-12-05 Sebastian Pop <>
PR bootstrap/38262
* (cc1plus-dummy, cc1plus): Add BACKENDLIBS,
remove GMPLIBS.
2008-12-04 Jason Merrill <>
PR c++/37906
* decl.c (grok_special_member_properties): Set TYPE_HAS_COMPLEX_DFLT
* class.c (check_bases_and_members): Rather than assuming any
user-declared default constructor is complex here.
2008-12-04 Richard Guenther <>
PR c++/38334
* typeck.c (get_member_function_from_ptrfunc): Mark the vtbl
pointer access with TREE_NO_WARNING.
2008-12-03 Jason Merrill <>
PR c++/38232
* init.c (build_value_init): Do initial zero-initialization
of a class with an implicitly-defined constructor using
build_zero_init rather than in build_value_init.
(build_value_init_1): Fold into build_value_init.
PR c++/38256
* parser.c (cp_parser_conversion_type_id): Diagnose
'operator auto' here.
* decl.c (grokdeclarator): Not here.
PR c++/38380
* decl.c (grokdeclarator): Only set DECL_NONCONVERTING_P
on explicit constructors.
* pt.c (tsubst_copy_and_build) [CONSTRUCTOR]: Propagate
2008-12-02 Jason Merrill <>
PR c++/35782, c++/37860
* call.c (build_user_type_conversion_1): Remember
(convert_like_real): Likewise.
(build_over_call): Don't require the copy constructor
for copy-list-initialization.
* cp-tree.h (TARGET_EXPR_LIST_INIT_P): New macro.
PR c++/37234
* decl.c (cp_finish_decl): Handle =default and =delete for
templates, too.
2008-12-01 Jakub Jelinek <>
PR c++/38257
* parser.c (cp_parser_omp_for_loop): Handle auto.
* pt.c (tsubst_omp_for_iterator): Likewise.
2008-11-28 Jason Merrill <>
PR c++/38233
* init.c (perform_member_init): Fix value-initialization.
(build_value_init_1): Add assert to catch cases that will break
in the gimplifier.
(build_default_init): Remove.
* cp-tree.h: Remove its prototype.
* pt.c (tsubst_expr) [DECL_EXPR]: Use build_value_init for
PR c++/38278
* parser.c (cp_parser_class_name): Only call
maybe_note_name_used_in_class if we actually found a class name.
2008-11-25 Jason Merrill <>
PR c++/28743
* decl2.c (check_classfn): Error rather than abort on parameter
list mismatch.
2008-11-20 Jason Merrill <>
PR c++/28513
* parser.c (cp_parser_class_name): Call maybe_note_name_used_in_class.
PR c++/37540
* call.c (build_over_call): Take the address of the function even
in a template.
(build_new_method_call): Remember the type of the called function
in a template.
2008-11-19 Dodji Seketeli <>
PR c++/37142
* pt.c (coerce_template_template_parm): Use the more robust
uses_template_parms instead of dependent_type_p.
2008-11-19 Dodji Seketeli <>
PR c++/35405
* pt.c (lookup_template_class): Check pointers before dereferencing
* error.c (dump_template_decl): Likewise.
2008-11-19 Jason Merrill <>
PR c++/36410
* decl2.c (grokfield): Pass ATTR_FLAG_TYPE_IN_PLACE for a typedef
that names a class for linkage purposes.
PR c++/37563
* parser.c (cp_parser_pseudo_destructor_name): A pseudo-destructor
name is not a declaration.
PR c++/37256
* pt.c (instantiate_decl): Don't require a definition of
a template that is explicitly instantiated 'extern'.
2008-11-18 Jason Merrill <>
Jakub Jelinek <>
PR c++/37962
* parser.c (cp_parser_type_id): Complain about auto.
* decl.c (grokdeclarator): Complain about parameters and
conversion functions declared with auto.
* call.c (standard_conversion): Use CLASS_TYPE_P instead of
* cp-tree.h (TYPE_NON_AGGREGATE_CLASS): Likewise.
2008-11-17 Jakub Jelinek <>
PR c++/36089
* init.c (constant_value_1): Handle TREE_LIST init.
2008-11-15 Jakub Jelinek <>
PR c++/37561
* typeck.c (cp_build_unary_op): Don't call get_unwidened. Use
argtype instead of result_type.
2008-11-14 Jason Merrill <>
PR c++/38030
* semantics.c (finish_call_expr): Don't repeat arg-dep lookup
for a non-dependent call.
PR c++/37740
* call.c (build_aggr_conv): Increment i.
2008-11-13 Jason Merrill <>
PR c++/37932
* typeck2.c (process_init_constructor_record): Update bitfield
(check_narrowing): Update bitfield handling, print source type.
2008-11-12 Jakub Jelinek <>
PR c++/36478
2007-05-07 Mike Stump <>
* parser.c (check_empty_body): Add.
(cp_parser_iteration_statement): Add call to check_empty_body.
2008-11-12 Jason Merrill <>
PR c++/38007
* typeck.c (cp_build_modify_expr): Update bitfield handling.
2008-11-12 Jakub Jelinek <>
PR c++/34269
* parser.c (cp_parser_simple_declaration): Don't commit
to tentative parse if parse errors were seen.
PR c++/35334
* error.c (dump_expr): Handle COMPLEX_EXPR.
2008-11-10 Jakub Jelinek <>
PR c++/38021
* parser.c (cp_parser_enum_specifier): After parsing :,
parse definitely. Don't return early if type specifier
is erroneous.
2008-11-06 David Edelsohn <>
PR target/26397
* g++spec.c (LIBSTDCXX_STATIC): New.
(lang_spec_driver): Use LIBSTDCXX_STATIC when not
2008-11-05 Fabien Chêne <>
PR c++/32519
* cp-tree.h: Fix DECL_NONSTATIC_MEMBER_P to handle member template
2008-11-05 Richard Guenther <>
PR middle-end/37742
* decl.c (start_preparsed_function): Use the correct type for
building the RESULT_DECL.
2008-10-31 Jakub Jelinek <>
PR c++/37967
* decl.c (grokdeclarator): Diagnose auto function decl without
late return type and late return type function decl where type
is not auto.
PR c++/37965
* decl.c (cp_finish_decl): Diagnose type_uses_auto type with
no initializer.
2008-10-29 Manuel Lopez-Ibanez <>
PR 11492
* class.c (check_bitfield_decl): Rename min_precision to
* decl.c (finish_enum): Likewise.
2008-10-29 Manuel López-Ibáñez <>
PR c++/26997
* parser.c (cp_parser_token_starts_cast_expression): New.
(cp_parser_cast_expression): Peek the next token to decide whether
this could be a parenthesized constructor or is definitely an
actual cast.
2008-10-24 Manuel López-Ibáñez <>
PR c/7543
* typeck.c (build_x_binary_op): Update call to
* parser.c (cp_parser_binary_expression): Add note about passing
the correct code for unary expressions.
2008-10-24 Jakub Jelinek <>
* (check-c++-subtargets): New alias for
(lang_checks_parallelized): Add check-g++.
(check_g++_parallelize): New variable.
2008-10-21 Richard Guenther <>
* semantics.c (simplify_aggr_init_exprs_r): Remove.
(expand_or_defer_fn): Do not walk the function body to
simplify aggr_init_exprs.
2008-10-20 Manuel López-Ibáñez <>
PR c++/37004
* typeck.c (cp_common_type): New. The same as
type_after_usual_arithmetic_conversions but without promotions.
(type_after_usual_arithmetic_conversions): Do the promotions and
call cp_common_type.
(common_type): Make it behave like the C version of this
function. Do not handle pointer types.
(common_pointer_type): Move handling of pointer types from
common_type to here.
(cp_build_binary_op): Use common_pointer_type instead of
common_type in call to pointer_diff.
Use cp_common_type instead of common_type.
* cp-tree.h (common_pointer_type): Declare.
2008-10-14 Jakub Jelinek <>
PR c++/37819
* cp-gimplify.c (cp_genericize_r): Only fold_convert COND_EXPR
arguments if they don't already have COND_EXPR's type.
2008-10-14 Paolo Carlini <>
PR c++/37650
* pt.c (push_template_decl_real): Check that current_template_parms
is not null.
(process_partial_specialization): Assert current_template_parms not
2008-10-13 Doug Evans <>
* cp-tree.h (DECL_MAIN_P): Fix parentheses around expression.
2008-10-10 Jakub Jelinek <>
PR c++/37146
* cp-gimplify.c (cp_genericize_r): Fix up bitfield operands of
2008-10-09 Jakub Jelinek <>
PR c++/37568
* semantics.c (finalize_nrv_r): Clear DECL_INITIAL instead of
setting it to error_mark_node.
2008-10-07 Steve Ellcey <>
* decl.c (start_cleanup_fn): Declare as inline.
2008-10-06 Jason Merrill <>
PR c++/37376, other mangling issues
* mangle.c (write_type): Update TYPE_PACK_EXPANSION mangling.
(write_member_name): Break out from...
(write_expression): Handle dependent COMPONENT_REF.
(write_template_arg): Wrap an argument pack in 'I'/'E'.
(write_builtin_type): Update char16/32_t mangling.
(write_nested_name, write_prefix): Don't forget template args
for typename types.
* operators.def: Add ARROW_EXPR, update COMPONENT_REF and
2008-10-06 Aldy Hernandez <>
* typeck.c (build_x_indirect_ref): Add location argument.
(cp_build_binary_op): Pass location to warn_for_div_by_zero.
(cp_build_unary_op): Add location argument.
(cp_build_modify_expr): Same.
* class.c (build_base_path): Pass location to build_indirect_ref.
* semantics.c (handle_omp_for_class_iterator): Pass elocus to
2008-10-05 Dodji Seketeli <>
PR c++/37410
* cp-gimplify.c (cp_gimplify_expr): For each USING_STMT
make sure an IMPORTED_DECL node is added to the BLOCK_VARS list
of the innermost containing BLOCK.
2008-10-03 Paolo Carlini <>
PR c++/37719
* error.c (dump_function_decl): Save the exceptions in case of
error about incompatible specifications in a specialization.
2008-10-01 Andrew Pinski <>
* tree.c (lvalue_p_1): COMPOUND_LITERAL_EXPR is also an lvalue.
2008-09-30 H.J. Lu <>
PR c++/37683
* parser.c (cp_parser_selection_statement): Fix uninitialized
2008-09-30 Simon Martin <>
PR c++/37555
PR c++/37556
* decl.c (grokdeclarator): Set the type for typedefs to a
nested-name-specifier to error_mark_node.
2008-09-30 Paolo Bonzini <>
* parser.c (cp_parser_selection_statement): Implement here the
-Wempty-body warning for `if' and `else' statements.
* semantics.c (finish_if_stmt): Do not call empty_body_warning.
2008-09-25 Paolo Carlini <>
PR c++/37649
* name-lookup.c (maybe_process_template_type_declaration): Check
return value of push_template_decl_real for error_mark_node.
2008-09-24 Aldy Hernandez <>
* semantics.c (finish_fname): Pass location to fname_decl.
2008-09-23 Jakub Jelinek <>
PR c++/37533
* semantics.c (finish_omp_for): If processing_template_decl, just build
MODIFY_EXPR for init instead of calling cp_build_modify_expr.
2008-09-23 Aldy Hernandez <>
* typeck.c (build_array_ref): Pass location to cp_build_binary_op.
(get_member_function_from_ptrfunc): Same.
(build_x_binary_op): Same.
(build_binary_op): Same.
(cp_build_binary_op): New location argument.
(pointer_diff): Pass location to cp_build_binary_op.
(cp_truthvalue_conversion): Pass location to build_binary_op.
(convert_ptrmem): Pass location to cp_build_binary_op.
(cp_build_modify_expr): Same.
(build_ptrmemfunc): Same.
* init.c (expand_cleanup_for_base): Pass location to
(build_new_1): Pass location to cp_build_binary_op.
(build_vec_delete_1): Pass location to *build_binary_op,
(build_vec_init): Same.
(build_delete): Same.
* decl.c (compute_array_index_type): Same.
* call.c (build_new_op): Same.
* rtti.c (build_dynamic_cast_1): Same.
* cp-tree.h: Add argument to cp_build_binary_op.
* semantics.c (handle_omp_for_class_iterator): Pass location to
*build_binary_op, c_common_truthvalue_conversion.
* decl2.c (get_guard_cond): Same.
2008-09-17 Richard Guenther <>
PR c++/22374
* rtti.c (build_dynamic_cast_1): Convert the COND_EXPR
result to the correct type.
2008-09-17 H.J. Lu <>
PR c++/37450
* name-lookup.c (pushdecl_maybe_friend): Don't return the old
parameter for duplicate.
2008-09-17 Jason Merrill <>
PR c++/37588
* name-lookup.c (lookup_type_scope): Look through sk_function_parms.
2008-09-17 Jakub Jelinek <>
PR c++/37552
* typeck.c (build_array_ref): Use protected_set_expr_location instead
of SET_EXPR_LOCATION when ret might not be an expression.
2008-09-17 Jan Hubicka <>
PR c++/18071
* cp/decl.c (start_method): Set DECL_NO_INLINE_WARNING_P.
2008-09-16 Jakub Jelinek <>
PR c++/37531
* semantics.c (finish_compound_literal): Return error_mark_node if
type is errorneous.
PR c++/37532
* lex.c (init_reswords): Don't populate ridpointers for D_CONLY
reserved words.
2008-09-15 Aldy Hernandez <>
* decl.c (duplicate_decls): Call error_at.
(grokfndecl): New location argument. Use location if available.
(grokdeclarator): Pass declarator location to grokfndecl.
* cp-tree.h (struct cp_declarator): Update comment for id_loc.
* decl2.c (check_classfn): Use error_at.
* parser.c (cp_parser_init_declarator): Set function_start_locus
to brace location.
(cp_parser_member_declaration): Set id_loc for function declarators.
2008-09-09 Jan Hubicka <>
PR middle-end/37500
* pt.c (tsubst_decl): Do not copy DECL_STRUCT_FUNCTION pointer.
2008-09-09 Jakub Jelinek <>
PR c++/37417
* tree.c (array_type_nelts_top): Add size_one_node instead of
2008-09-09 Jason Merrill <>
PR c++/37439
* pt.c (tsubst_copy) [PARM_DECL]: Don't abort if the parm has
2008-09-09 Jakub Jelinek <>
PR c++/37389
* decl.c (build_enumerator): Handle previous value's DECL_INITIAL
being error_operand_p. Don't clear value if it was error_mark_node.
2008-09-09 Paolo Bonzini <>
* cp-objcp-common.h (LANG_HOOKS_EXPAND_DECL): Remove.
* cp-tree.h: Don't mention DECL_ANON_UNION_ELEMS.
* semantics.c (anon_aggr_type_p): Remove.
2008-09-06 Jason Merrill <>
PR c++/37302
* parser.c (cp_parser_parameter_declaration_list): Process the
PARM_DECLs as we go and push them. Return a TREE_LIST.
(cp_parser_parameter_declaration_clause): Return a TREE_LIST.
(cp_parser_direct_declarator): Create a binding level and
suppress deprecated warnings in the parameter list.
(make_call_declarator): PARMS is now a tree.
* cp-tree.h (struct cp_declarator): Function parms are now a tree.
* decl.h (enum deprecated_states, deprecated_state): Move here.
* decl.c: From here.
(type_is_deprecated): New fn.
(grokparms): PARMLIST is a tree now. Warn about parms that
use deprecated types.
* mangle.c (write_expression): Handle PARM_DECL, CALL_EXPR and
0-operand cast.
* pt.c (tsubst) [DECLTYPE_TYPE]: Set skip_evaluation.
(tsubst_copy) [PARM_DECL]: Handle a PARM_DECL used outside of a
* name-lookup.c (pushtag): Look through function parameter scopes.
(pushdecl_maybe_friend): Don't set DECL_CONTEXT on a PARM_DECL
when we're parsing a function declarator.
2008-09-05 Douglas Gregor <>
PR c++/37342
* tree.c (cp_build_qualified_type_real): Deal with sharing of
TYPE_LANG_SPECIFIC in the canonical types of pointer-to-method
2008-09-04 Ian Lance Taylor <>
* parser.c (check_no_duplicate_clause): Change code parameter to
enum omp_clause_code.
2008-09-03 Jakub Jelinek <>
PR c++/37348
* decl.c (cp_finish_decl): Only set
PR c++/37189
* cp-tree.h (defer_mark_used_calls, deferred_mark_used_calls): New
extern decls.
* decl2.c (mark_used): If defer_mark_used_calls, push decl into
deferred_mark_used_calls vector and exit early.
* decl.c (defer_mark_used_calls, deferred_mark_used_calls): New
(finish_function): Set defer_mark_used_calls for the duration of the
function. Call mark_used on any queued decls.
2008-09-02 Jason Merrill <>
PR c++/37208
* call.c (build_over_call): Make =delete work with SFINAE.
* class.c (resolve_address_of_overloaded_function): Likewise.
* cp-tree.h (struct lang_decl_flags): Rename threadprivate_p to
(DECL_DELETED_FN): Likewise.
(SD_DELETED): New macro.
* parser.c (cp_parser_init_declarator): Use them.
* decl.c (start_decl): Use them.
* decl2.c (mark_used): Give =deleted error even in sizeof.
* typeck2.c (check_narrowing): Downgrade narrowing error to
2008-09-02 Aldy Hernandez <>
* typeck.c (build_array_ref): Use new location argument.
* class.c (build_vtbl_ref_1): Pass location to build_array_ref.
* call.c (build_new_op): Same.
* decl2.c (grok_array_decl): Same.
* cp-tree.h (build_array_ref): Add location argument to prototype.
2008-09-01 Aldy Hernandez <>
* typeck.c (build_x_indirect_ref): Add location argument.
* class.c (build_base_path): Pass location to build_indirect_ref.
* pt.c (tsubst_copy_and_build): Pass location to
* parser.c (cp_parser_unary_expression): Same.
2008-08-31 Jason Merrill <>
Implement late-specified return type using 'auto'.
* cp-tree.h (struct cp_declarator): Add late_return_type field to
function declarator.
* parser.c (cp_parser_late_return_type_opt): New fn.
(cp_parser_direct_declarator): Use it.
(make_call_declarator): Put it in the declarator.
* decl.c (grokdeclarator): Splice in late-specified return type.
* pt.c (splice_late_return_type): New fn.
2008-08-29 Michael Meissner <>
* decl.c (builtin_function_1): Take a bool argument to decide
whether to use pushdecl or pushdecl_top_level.
(duplicate_decls): Copy function specific target and optimization
options on duplicate declarations.
(cxx_builtin_function): Update builtin_function_1 call.
(cxx_builtin_function_ext_scope): New function, guarantee that the
declaration is done at global scope.
macro, define builtin function hook for delayed machine specific
* cp-tree.h (cxx_builtin_function_ext_scope): Add declaration.
2008-08-30 Jason Merrill <>
PR c++/37288
* pt.c (dependent_type_p): Don't abort on auto outside of a template.
2008-08-29 Jason Merrill <>
Implement C++0x 'auto' semantics.
* decl.c (start_decl_1): Don't complain about auto being incomplete.
(cp_finish_decl): Deduce auto.
* init.c (build_new): Handle 'new auto'.
* typeck2.c (cxx_incomplete_type_diagnostic): Give a different
message for auto than for normal template type parms.
* pt.c (type_dependent_expression_p): Handle { }.
(make_auto): New function.
(listify_autos): New function.
(do_auto_deduction): New function.
(is_auto): New function.
(type_uses_auto): New function.
* cp-tree.h: Declare them.
* parser.c (cp_parser_decl_specifier_seq): In C++0x mode, don't
treat auto as a declspec.
(cp_parser_simple_type_specifier): It's a type-specifier.
2008-08-29 Mark Mitchell <>
* mangle.c (write_type): Add target-specific manglings for
non-fundamental types to the substitution table.
2008-08-29 Jakub Jelinek <>
PR fortran/29635
PR fortran/23057
* name-lookup.c (do_using_directive, cp_emit_debug_info_for_using):
Adjust debug_hooks->imported_module_or_decl callers.
2008-08-29 Jan Hubicka <>
* cp-gimplify.c (cp_gimplify_expr): Add PRED_CONTINUE heuristic.
2008-08-28 Paolo Carlini <>
PR c++/37260
* decl.c (reshape_init_r): Check init for error_mark_node.
2008-08-27 Manuel Lopez-Ibanez <>
PR c++/17880
* semantics.c (maybe_convert_cond): Call verify_sequence_points.
(finish_return_stmt): Likewise.
(finish_switch_condition): Likewise.
2008-08-27 Manuel Lopez-Ibanez <>
* cp-tree.h: Fix #error directive.
2008-08-26 Douglas Gregor <>
* typeck.c (type_after_usual_arithmetic_conversions): Don't do the
usual arithmetic conversions on scoped enumeration types.
(common_type): Ditto.
(default_conversion): Don't perform integral promotions on scoped
enumeration types.
(build_array_ref): Scoped enumeration types can't be used as
* decl.c (start_enum): If building a C++0x scoped enumeration,
enter its scope. If provided with an underlying type, check that
underlying type and set up the enumeration type accordingly.
(finish_enum): Only compute an underlying type if the underlying
type isn't already fixed, and only convert the enumerator values
now if we've just computed the underlying type. Finish the scope
of C++0x scoped enumerations.
(build_enumerator): For enumerations with a fixed underlying type,
check the enumerator values when the enumerator is defined.
(lookup_enumerator): New.
* call.c (standard_conversion): Don't allow assignment from
integers to scoped enumeration types, even with -fpermissive.
Don't convert from scoped enumerations to bool or any arithmetic
(build_conditional_expr): Don't per the usual arithmetic
conversions for scoped enumeration types.
(convert_like_real): Check complain to see if we should
produce warnings.
* error.c (class_key_or_enum_as_string): Print scoped enums.
* cp-tree.h (MAYBE_CLASS_TYPE_P): Check CLASS_TYPE_P, not
* pt.c (lookup_template_class): Update the instantiation of enum
types to deal with C++0x scoped enumerations and underlying
* name-lookup.c (begin_scope): Deal with scoped enumeration
(lookup_qualified_name): Deal with lookup into enumeration types.
* name-lookup.h (enum scope_kind): Add sk_scoped_enum.
* parser.c (cp_parser_class_or_namespace_name): Rename to...
(cp_parser_qualifying_entity): ... this. Also, in C++0x mode,
parse a type-name that can be an enumeration type.
(cp_parser_nested_name_specifier_opt): Update with C++0x grammar.
(cp_parser_elaborated_type_specifier): Parse the
optional `struct' or `class' following enum (in C++0x).
(cp_parser_enum_specifier): Parse C++0x scoped enumerations and
enum-base clauses.
2008-08-21 Manuel Lopez-Ibanez <>
* typeck.c: Update all calls to pedwarn.
* decl.c: Likewise.
* call.c: Likewise.
* error.c: Likewise.
* pt.c: Likewise.
* name-lookup.c: Likewise.
* parser.c: Likewise.
2008-08-20 Manuel Lopez-Ibanez <>
PR c++/35158
* parser.c (cp_parser_omp_for_loop): Handle parenthesized
2008-08-20 Manuel Lopez-Ibanez <>
* parser.c: Update all calls to inform.
* typeck.c: Likewise.
* init.c: Likewise.
* class.c: Likewise.
* call.c: Likewise.
* method.c: Likewise.
* friend.c: Likewise.
* typeck2.c: Likewise.
* pt.c: Likewise.
* name-lookup.c: Likewise.
* lex.c: Likewise.
2008-08-19 Jakub Jelinek <>
PR debug/37156
* error.c (cp_print_error_function): Deal with recursive BLOCK trees.
2008-08-18 Tomas Bily <>
* tree.c (cp_tree_equal): Use CONVERT_EXPR_CODE_P.
2008-08-18 Manuel Lopez-Ibanez <>
* typeck.c: Update all callers of permerror.
* init.c: Likewise.
* class.c: Likewise.
* decl.c: Likewise.
* call.c: Likewise.
* except.c: Likewise.
* cvt.c: Likewise.
* typeck2.c: Likewise.
* pt.c: Likewise.
* semantics.c: Likewise.
* name-lookup.c: Likewise.
* lex.c: Likewise.
* decl2.c: Likewise.
* parser.c: Likewise.
2008-08-14 Paolo Carlini <>
PR c++/34485
* pt.c (check_template_shadow): Change to return a bool.
* name-lookup.c (push_class_level_binding): Early return if
check_template_shadow returns false.
* cp-tree.h (check_template_shadow): Adjust declaration.
2008-08-14 Paolo Carlini <>
PR c++/34600
* decl.c (grokdeclarator): In case of extern and initializer, return
error_mark_node after the error.
2008-08-13 Manuel Lopez-Ibanez <>
PR 30551
* decl.c (grokfndecl): Call check_main_parameters_type only if
2008-08-12 Paolo Carlini <>
PR c++/37087
* parser.c (cp_parser_class_head): Early return error_mark_node in
case of global qualification of class name or qualified name that
does not name a class.
2008-08-09 Manuel Lopez-Ibanez <>
PR c++/12242
* cvt.c (ocp_convert): Warn for out-of-range conversions to enum.
2008-08-09 Manuel Lopez-Ibanez <>
PR 36901
* cp-tree.h (struct diagnostic_context, struct diagnostic_info):
Delete forward declarations. Check that toplev.h has not been
included before this file. Include toplev.h and diagnostic.h.
* error.c (cp_cpp_error): Use DK_PEDWARN.
(cxx_incomplete_type_diagnostic): Update declaration.
(cxx_incomplete_type_error): Use DK_ERROR.
* typeck2.c (cxx_incomplete_type_diagnostic): Take a diagnostic_t
as argument. Use emit_diagnostic.
(cxx_incomplete_type_error): Use DK_ERROR.
(add_exception_specifier): Use diagnostic_t instead of custom
* typeck.c (complete_type_or_else): Update call to
* init.c (build_delete): Likewise.
* call.c (diagnostic_fn_t): Remove unused typedef.
(build_temp): Pass a pointer to diagnostic_t.
(convert_like_real): Use emit_diagnostic.
(joust): Check return value of warning before giving informative
* friend.c (do_friend): Check return value of warning
before giving informative note.
* parser.c (cp_parser_template_id): Likewise.
2008-08-09 Manuel Lopez-Ibanez <>
PR 7651
* class.c (check_bases_and_members): Warn with -Wuninitialized
instead of -Wextra.
2008-08-08 Volker Reichelt <>
PR c++/35985
* decl.c (xref_basetypes): Check base for MAYBE_CLASS_TYPE_P,
and make sure it is not a union.
2008-08-07 H.J. Lu <>
* semantics.c (finish_decltype_type): Initialize type.
2008-08-07 Douglas Gregor <>
* semantics.c (finish_decltype_type): Handle calls to function
pointers and references to functions properly.
2008-08-06 Douglas Gregor <>
PR c++/36460
* parser.c (cp_parser_template_argument): Don't assume that '>>'
following a type-id is an error when in C++0x mode.
2008-08-06 Manuel Lopez-Ibanez <>
PR 26785
* decl.c (grokdeclarator): Use explicit location with permerror_at.
2008-08-06 Manuel Lopez-Ibanez <>
PR 8715
* typeck.c (cp_build_binary_op): Move code to c-common.c.
2008-08-05 Jason Merrill <>
PR c++/37016
* decl.c (build_ptrmemfunc_type): Don't require structural
comparison of PMF types.
* tree.c (cp_build_qualified_type_real): Don't clear
* typeck.c (cp_build_unary_op): Still do build_ptrmemfunc in
2008-08-04 Jason Merrill <>
PR c++/36963
* typeck2.c (check_narrowing): Allow narrowing conversion
from an explicit floating-point constant.
PR c++/37006
* pt.c (tsubst_decl): Leave DECL_INITIAL set on deleted
2008-08-04 Simon Baldwin <>
PR c++/36999
* parser.c (cp_parser_elaborated_type_specifier): Warn only when
the declaration's id is followed by a semicolon.
2008-07-31 Jakub Jelinek <>
PR c++/36405
* rtti.c (get_tinfo_decl_dynamic, get_typeid): Call
complete_type_or_else even for UNKNOWN_TYPE to get diagnostics.
2008-07-31 Jason Merrill <>
PR c++/36633
* init.c (build_new_1): Don't convert pointer to the data type
until we're actually going to treat it as that type.
PR c++/11309
* tree.c (build_aggr_init_expr): Split out...
(build_cplus_new): ...from here.
(stabilize_init): Don't mess with AGGR_INIT_EXPR either.
* init.c (build_new_1): new T() means value-initialization,
not default-initialization.
(build_vec_init): Likewise.
(build_value_init_1): Use build_aggr_init_expr.
2008-07-30 Dodji Seketeli <>
PR c++/36767
* decl2.c (fix_temporary_vars_context_r): New function.
(one_static_initialization_or_destruction): Make sure temporary
variables part of the initialiser have their DECL_CONTEXT()
properly set.
2008-07-30 Manuel Lopez-Ibanez <>
PR 34389
* typeck.c (build_binary_op): Encapsulate code into
2008-07-29 Jakub Jelinek <>
PR c++/36852
* tree.c (cplus_array_hash, build_cplus_array_type_1): Hash on
TYPE_UID instead of pointers.
2008-07-29 Jan Hubicka <>
* optimize.c (maybe_clone_body): Remove DECL_INLINE.
* decl.c (duplicate_decls): Likewise.
(grokfndecl): Likewise.
(start_method): Likewise.
* method.c (make_thunk, make_alias_for, implicitly_declare_fn):
* pt.c (register_specialization, regenerate_decl_from_template):
* decl2.c (grokfield): Likewise.
2008-07-29 Manuel Lopez-Ibanez <>
PR 34985
* decl.c (duplicate_decls): Merge USED flags.
2008-07-27 Jason Merrill <>
PR c++/36943
* decl.c (reshape_init_r): Allow C++0x initializer lists.
2008-07-28 Richard Guenther <>
Merge from gimple-tuples-branch.
2008-07-22 Aldy Hernandez <>
* cp-gimplify.c (gimplify_if_stmt): Set location on newly created
2008-07-18 Jakub Jelinek <>
* decl.c (finish_function): Call gimple_body after cp_genericize.
2008-07-18 Aldy Hernandez <>
* optimize.c: Include gimple.h instead of tree-gimple.h.
* (cp-gimplify.o): Depend on tree-iterator.h.
* cp-gimplify.c: Rename tree-gimple.h to gimple.h. Include
2008-07-16 Jakub Jelinek <>
* optimize.c (maybe_clone_body): Clear DECL_SAVED_TREE for the clone.
2008-07-14 Jakub Jelinek <>
* cp-gimplify.c (cp_gimplify_expr): Update comment.
2008-07-14 Aldy Hernandez <>
* cp-tree.h (union lang_tree_node): Rename GENERIC_NEXT to
* cp-gimplify.c (cxx_omp_clause_apply_fn): Rename
(cxx_omp_clause_copy_ctor): Same.
(cxx_omp_clause_assign_op): Same.
2008-05-28 Jakub Jelinek <>
* cp-gimplify.c (cp_gimplify_omp_for): Add pre_p argument. Tuplify.
(cp_gimplify_expr): Adjust caller.
2008-05-11 Doug Kwan <>
* init.c (build_vec_delete): Add type conversion for argument
2008-04-29 Doug Kwan <>
* decl2 (File): Include "gimple.h"
(cp_write_global_declarations): Use gimple_body instead of
* (cp/decl2.o): Add $(GIMPLE_H)
2008-04-10 Diego Novillo <>
* optimize.c (maybe_clone_body): Re-enable call to
* cp-gimplify.c (cp_gimplify_omp_for): Mark disabled
code with call to gimple_unreachable.
(cp_genericize): Fix handling of clone bodies.
2008-04-04 Diego Novillo <>
* optimize.c (maybe_clone_body): Re-enable.
2008-02-19 Diego Novillo <>
Oleg Ryjkov <>
* cp-gimplify.c (gimplify_for_stmt): Change gimple_seq
argument to gimple_seq *. Update all users.
(gimplify_must_not_throw_expr): Likewise.
2008-02-04 Oleg Ryjkov <>
* except.c: Include gimple.h
(cp_protect_cleanup_actions): Convert to tuples.
* (cp/except.o): Add dependency on gimple.h
2007-11-10 Aldy Hernandez <>
* cp-gimplify.c (gimplify_cp_loop): Call tree_annotate_all_with_locus
instead of annotating each block manually.
2007-10-30 Aldy Hernandez <>
* cp-gimplify.c (gimplify_cp_loop): Tuplify.
(gimplify_for_stmt): Same.
(gimplify_switch_stmt): Same.
(cp_gimplify_expr): [FOR_STMT]: Do not call gimplify_for_stmt. Return
(cp_genericize): Set gimple_body() of cloned functions when needed.
2007-10-29 Aldy Hernandez <>
* cp-gimplify.c: Move build_gimple_eh_filter_tree here.
(cp_gimplify_init_expr): Convert to tuples.
(gimplify_must_not_throw_expr): Make function return a
gimplify_status and convert to tuples.
2007-10-18 Aldy Hernandez <>
* cp-gimplify.c (genericize_try_block): Enable and do not call
(genericize_catch_block): Same.
(genericize_eh_spec_block): Same.
Rename gimple_build_eh_filter_tree to build_gimple_eh_filter_tree.
(cp_gimplify_expr): Enable TRY_BLOCK, HANDLER, and EH_SPEC_BLOCK.
2007-10-16 Aldy Hernandez <>
* optimize.c (maybe_clone_body): Comment out call to clone_body.
* decl.c (finish_function): Use gimple_body instead of
* cp-tree.h (cp_gimplify_expr): Last 2 arguments are sequences.
* cp-gimplify.c (genericize_try_block): Comment out.
(genericize_catch_block): Same.
(genericize_eh_spec_block): Same.
(gimplify_cp_loop): Comment out calls to gimplify_stmt.
(gimplify_for_stmt): Comment out.
(gimplify_switch_stmt): Comment out call to gimplify_stmt.
(cp_gimplify_omp_for): Same.
(gimplify_must_not_throw_expr): Argument pre_p is a sequence.
Comment out call to gimplify_stmt and append_to_statement_list.
Rename gimple_build_eh_filter_tree to build_gimple_eh_filter_tree.
(cp_gimplify_init_expr): Arguments pre_p and post_p are sequences.
(cp_gimplify_expr): Same.
Comment out calls to genericize_*_block. Comment out call to
2008-07-27 H.J. Lu <>
PR c++/36944
* class.c (type_has_user_provided_default_constructor): Handle
default parameters.
2008-07-27 Paolo Carlini <>
* decl.c (push_library_fn): Add a parameter for the exceptions that
the function may throw.
(push_void_library_fn, push_throw_library_fn, expand_static_init):
(build_library_fn): Change to static.
* cp-tree.h: Adjust declarations.
* except.c (declare_nothrow_library_fn): New.
(do_get_exception_ptr, do_begin_catch, do_free_exception,
do_allocate_exception): Use the latter, adjust the declarations
(ie, add empty exception-specification), consistently with the
actual implementation in libsupc++.
2008-07-25 Jan Hubicka <>
* typeck.c (inline_conversion): Remove.
(cp_build_function_call): Do not use inline_conversion.
* decl.c (duplicate_decls): Do not insist on inline being declared
(start_cleanup_fn): Do not assume that INLINE flags prevent function
from being output. We now remove static functions always.
(finish_function): Do return warning on all static functions.
* call.c (build_over_call): Do not use inline_conversion.
* cp-tree.h (possibly_inlined_p): Declare.
(inline_conversion): Remove.
* pt.c (instantiate_decl): Use possibly_inlined_p predicate.
* decl2.c (cp_write_global_declarations): Likewise.
(mark_used): Likewise.
(possibly_inlined_p): New functions.
2008-07-25 Jason Merrill <>
* class.c (type_has_user_provided_default_constructor): Handle
2008-07-23 Jan Hubicka <>
* decl.c (duplicate_decls): Update comment and unit-at-a-time.
(grogfndecl): Drop flag_inline_trees code.
* pt.c (instantiate_decl): Drop flag_iline_trees code.
* lex.c (cxx_init): Do not set unit-at-a-time.
2008-07-23 Jason Merrill <>
* mangle.c (write_unqualified_name): Avoid infinite recursion when
trying to mangle a decl with no name.
Implement defaulted/deleted functions as per N2346
* cp-tree.h (struct lang_decl_flags): Add defaulted_p bitfield.
(DECL_DELETED_FN): New macro.
* class.c (user_provided_p): New fn.
(defaultable_fn_p): New fn.
(type_has_user_provided_constructor): New fn.
(type_has_user_provided_default_constructor): New fn.
(check_methods): A defaulted fn is still trivial.
(check_bases_and_members): Likewise.
* decl.c (grok_special_member_properties): Likewise.
(duplicate_decls): Complain about redeclaring a function as deleted.
(start_decl): initialized==2 means deleted.
(cp_finish_decl): Handle deleted/defaulted semantics.
* decl2.c (grokfield): Likewise.
(mark_used): Check DECL_DEFAULTED_FN instead of DECL_ARTIFICIAL.
Complain about using a deleted fn.
* init.c (build_value_init_1): Use type_has_user_provided_constructor.
(perform_member_init): Check for a user-provided default constructor
(build_new_1): Likewise.
* call.c (build_over_call): Don't call mark_used twice.
* method.c (implicitly_declare_fn): Set DECL_DEFAULTED_FN.
* search.c (check_final_overrider): Check for deleted mismatch.
* parser.c (cp_parser_init_declarator): Tell start_decl about =delete.
(cp_parser_pure_specifier): Handle =default and =delete.
* error.c (maybe_warn_cpp0x): Suggest -std=gnu++0x as well.
2008-07-23 Manuel Lopez-Ibanez <>
PR 35058
* typeck.c: All calls to pedwarn changed.
* decl.c: All calls to pedwarn changed.
* call.c: All calls to pedwarn changed.
* error.c: All calls to pedwarn changed.
* typeck2.c: All calls to pedwarn changed.
* pt.c: All calls to pedwarn changed.
* name-lookup.c: All calls to pedwarn changed.
* parser.c: All calls to pedwarn changed.
2008-07-21 Ralf Wildenhues <>
* call.c: Fix comment typos.
* class.c: Likewise.
* cp-tree.h: Likewise.
* cxx-pretty-print.c: Likewise.
* decl.c: Likewise.
* init.c: Likewise.
* name-lookup.c: Likewise.
* operators.def: Likewise.
* parser.c: Likewise.
* pt.c: Likewise.
* tree.c: Likewise.
* typeck.c: Likewise.
2008-07-21 Paolo Carlini <>
PR c++/36871
PR c++/36872
* semantics.c (classtype_has_nothrow_assign_or_copy_p): Only check
copy constructors and copy assignment operators proper.
2008-07-21 Rafael Ávila de Espíndola <>
* parser.c (cp_token): Remove in_system_header.
(eof_token): Remove in_system_header.
(cp_lexer_get_preprocessor_token): Don't set in_system_header.
(cp_lexer_set_source_position_from_token): Don't set in_system_header.
(cp_parser_member_declaration): Use in_system_header_at.
* pt.c (lookup_template_class): Don't set DECL_IN_SYSTEM_HEADER.
(pop_tinst_level): Don't set in_system_header.
(instantiate_class_template): Don't set in_system_header.
(instantiate_decl): Don't set in_system_header.
(instantiate_pending_templates): Don't set in_system_header.
2008-07-21 Paolo Carlini <>
PR c++/36870
* semantics.c (classtype_has_nothrow_assign_or_copy_p): Use
(trait_expr_value): Likewise.
2008-07-18 Dodji Seketeli <>
PR c++/36407
* call.c (convert_like_real): Don't take the error code path
when a rvalue or base conversion has the bad_p field set.
2008-07-18 Kris Van Hees <>
* rtti.c (emit_support_tinfos): Add char16_type_node and
* typeck2.c (digest_init): Support char16_t and char32_t.
2008-07-18 Kavih R. Ghazi <>
* cvt.c (convert_to_void): Avoid C++ keywords.
* decl.c (walk_namespaces_r, wrapup_globals_for_namespace):
* friend.c (is_friend): Likewise.
* init.c (perform_member_init): Likewise.
* mangle.c (write_template_prefix, write_template_template_param):
* name-lookup.c (do_namespace_alias, do_using_directive,
parse_using_directive, ambiguous_decl, arg_assoc): Likewise.
* parser.c (cp_parser_template_id, cp_parser_namespace_definition,
cp_parser_objc_typename, cp_parser_objc_method_keyword_params):
* pt.c (is_specialization_of_friend, lookup_template_class,
push_tinst_level, instantiate_class_template,
tsubst_copy_and_build): Likewise.
* tree.c (add_stmt_to_compound): Likewise.
* typeck.c (finish_class_member_access_expr): Likewise.
2008-07-17 Julian Brown <>
Mark Mitchell <>
* decl2.c (determine_visibility): Allow target to override
visibility of class data.
2008-07-17 Paolo Carlini <>
PR c++/36855
* semantics.c (trait_expr_value): Update __has_trivial_destructor
semantics to the current WP (N2691).
2008-07-16 Dodji Seketeli <>
PR c++/13699
* name-lookup.c (lookup_extern_c_fun_binding_in_all_ns): New function.
(pushdecl_maybe_friend): Check if a redeclaration of extern C function
complies with exception specification constraints.
2008-07-14 Jason Merrill <>
* lex.c (init_reswords): Always set D_OBJC.
2008-07-11 Tom Tromey <>
Ian Lance Taylor <>
* lex.c (struct resword, reswords): Don't define.
(D_EXT, D_ASM, D_OBJC, D_CXX0X): Don't define.
(init_reswords): Clarify mask code. Use c_common_reswords rather
than reswords.
2008-07-11 Dodji Seketeli <>
PR c++/13101
* decl.c (grokdeclarator): Warn about initializing variables
of storage class 'extern' only after the type of the declarator
has been properly computed.
2008-07-11 Dodji Seketeli <>
PR c++/31754
* cp-tree.h (struct cp_decl_specifier_seq): Add a location field. It
carries the location of the primary type.
* parser.c (cp_parser_check_type_definition): Update documentation.
cp_parser_new_expression, cp_parser_explicit_instantiation,
cp_parser_type_specifier, cp_parser_simple_type_specifier,
cp_parser_omp_for_loop, cp_parser_pragma): Use location in error
2008-07-11 Dodji Seketeli <>
PR c++/31754
* pt.c, semantic.c:
* semantic.c (qualified_name_lookup_error, finish_id_expression):
Add a location_t parameter so that
error message can have a more accurate location.
* cp-tree.h: Updated prototype
* pt.c (tsubst_qualified_id): Use location in error messages.
* parser.c (cp_parser_postfix_expression,
cp_parser_objc_statement, cp_parser_trait_expr,
cp_parser_check_for_invalid_template_id, cp_parser_is_string_literal,
cp_parser_error, cp_parser_name_lookup_error,
cp_parser_simulate_error, cp_parser_check_decl_spec,
cp_parser_check_decl_spec, cp_parser_non_integral_constant_expression,
cp_parser_require_pragma_eol, cp_parser_make_typename_type,
cp_parser_string_literal, cp_parser_primary_expression,
cp_parser_primary_expression, cp_parser_unqualified_id,
cp_parser_nested_name_specifier_opt, cp_parser_postfix_expression,
cp_parser_postfix_dot_deref_expression, cp_parser_new_expression,
cp_parser_direct_new_declarator, cp_parser_builtin_offsetof,
cp_parser_label_for_labeled_statement, cp_parser_statement_seq_opt,
cp_parser_jump_statement, cp_parser_block_declaration,
cp_parser_simple_declaration, cp_parser_decl_specifier_seq,
cp_parser_function_specifier_opt, cp_parser_decltype,
cp_parser_mem_initializer_list, cp_parser_mem_initializer,
cp_parser_mem_initializer_id, cp_parser_template_parameter,
cp_parser_type_parameter, cp_parser_template_id,
cp_parser_template_name, cp_parser_template_argument): Likewise.
2008-07-09 Paolo Carlini <>
PR c++/36760
* pt.c (tsubst_function_type): Remove warning for type qualifiers
on function return type.
2008-07-09 Paolo Carlini <>
PR c++/36760
* pt.c (tsubst_function_type): Don't warn for type qualifiers
on function return type in case of system header.
2008-07-09 Raksit Ashok <>
* parser.c (cp_parser_postfix_expression): New warning based on flag
2008-07-08 Simon Martin <>
PR c++/34963
* decl.c (grokdeclarator): Reset storage_class and staticp for friend
functions declared with a storage class qualifier.
2008-07-03 Richard Guenther <>
PR c++/36128
* typeck.c (cp_build_function_call): Move code to verify
builtin function arguments ...
* call.c (build_cxx_call): ... here.
2008-07-02 Jason Merrill <>
* (cp/typeck2.o): Add $(REAL_H) dependency.
Implement WG21 N2672, Initializer List proposed wording
* cp-tree.h (enum cp_tree_index): Add CPTI_INIT_LIST_TYPE.
(struct lang_type_class): Add has_list_ctor bitfield.
(TYPE_HAS_LIST_CTOR): New macro.
(BRACE_ENCLOSED_INITIALIZER_P): Expect init_list_type_node.
* parser.c (cp_parse_braced_list): Split out from...
(cp_parser_postfix_expression): Build up CONSTRUCTOR for compound
literal here.
(cp_lexer_next_token_is_not_keyword): New fn.
(cp_parser_parenthesized_expression_list): Handle { }.
(cp_parser_new_expression, cp_parser_new_initializer): Likewise.
(cp_parser_assignment_expression, cp_parser_condition): Likewise.
(cp_parser_jump_statement, cp_parser_simple_declaration): Likewise.
(cp_parser_mem_initializer, cp_parser_init_declarator): Likewise.
(cp_parser_initializer, cp_parser_functional_cast): Likewise.
(cp_parser_omp_for_loop, cp_parser_cache_group): Likewise.
(cp_parser_save_member_function_body): Likewise.
* call.c (conversion_kind): Add ck_list, ck_aggr.
(struct conversion): Add check_narrowing bitfield, conversion list.
(build_list_conv): New fn.
(build_aggr_conv): New fn.
(implicit_conversion): Call them.
(standard_conversion): Set check_narrowing if appropriate.
(add_function_candidate): Handle LOOKUP_NO_COPY_CTOR_CONVERSION.
(build_user_type_conversion_1): When converting from an init list,
we allow additional conversions except when calling a copy ctor.
(convert_like_real): Calling an explicit ctor for an init list is
ill-formed. Handle ck_list and ck_addr. Check narrowing.
(build_new_method_call): If CONSTRUCTOR_IS_DIRECT_INIT is set and
class doesn't have a list ctor, break the {} into a TREE_LIST.
(compare_ics): ck_list is better than other UDCs.
(set_up_extended_ref_temp): Split out from initialize_reference.
(is_std_init_list): New fn.
(is_list_ctor): New fn.
* decl.c (cxx_init_decl_processing): Create init_list_type_node.
(reshape_init_array_1): Pass it to build_constructor.
(reshape_init_class): Ditto.
(initialize_artificial_var): Pass the appropriate type.
(build_aggr_init_full_exprs): Split out from...
(check_initializer): Handle new semantics.
(build_init_list_var_init): New subroutine of check_initializer.
(grokdeclarator): Converting constructors can have more than one parm.
(grok_special_member_properties): Set TYPE_HAS_LIST_CTOR.
* init.c (expand_default_init): Only do digest_init for aggregates.
* rtti.c (tinfo_base_init): Pass init_list_type_node to
(generic_initializer, ptr_initializer): Ditto.
(ptm_initializer, class_initializer): Ditto.
(get_pseudo_ti_init): Ditto.
* error.c (dump_type): Handle init_list_type_node.
(maybe_warn_cpp0x): New fn.
(maybe_varn_variadic_templates): Call it.
* cvt.c (ocp_convert): Handle conversion from { }.
* tree.c (build_array_of_n_type): New fn.
* typeck2.c (store_init_value): Use init_list_type_node.
(digest_init): Likewise.
(check_narrowing): New fn.
* semantics.c: (finish_compound_literal): Take CONSTRUCTOR instead
of vector of constructor elts. Handle non-aggregate types. Make
constant literals static.
* pt.c: (tsubst_copy_and_build): Adjust.
(unify): Handle { }.
* name-lookup.c (arg_assoc_type): Handle init_list_type_node.
2008-07-01 Daniel Jacobowitz <>
* typeck.c (comp_ptr_ttypes_real): Use vector_targets_convertible_p.
(comp_ptr_ttypes_const): Likewise.
2008-07-01 Andrew Haley <>
* decl.c (finish_constructor_body): Don't set the return value of
the constructor if the constructor is that of a Java type.
2008-06-30 Jakub Jelinek <>
PR c++/36662
* decl2.c (is_late_template_attribute): If the first attribute
argument is IDENTIFIER_NODE, don't consider it when checking
if arguments are value or type dependent.
2008-06-29 Paolo Carlini <>
PR c++/36655
* pt.c (do_type_instantiation): In c++0x mode do not warn for
extern template.
2008-06-29 Kaveh R. Ghazi <>
* (cp-warn): Delete $(CXX_COMPAT_WARN).
2008-06-28 Jakub Jelinek <>
PR c++/36364
* repo.c (repo_emit_p): Put const static data members initialized
by const expr into *.rpo file, just return 2 if IDENTIFIER_REPO_CHOSEN
for it is 0.
2008-06-27 Paolo Carlini <>
PR c++/36655
* pt.c (do_decl_instantiation): In c++0x mode do not warn for
extern template.
2008-06-24 Jonathan Wakely <>
PR c++/23194
* typeck.c (cp_build_function_call): Show example syntax in
2008-06-21 Jonathan Wakely <>
* typeck.c (composite_pointer_type_r, cxx_sizeof_expr,
cxx_alignof_expr, check_template_keyword, cp_build_binary_op,
pointer_diff, cp_build_unary_op, build_x_compound_expr_from_list,
build_reinterpret_cast_1, cp_build_c_cast, check_return_expr): Change
pedwarn to permerror.
* init.c (perform_member_init, build_new_1, build_new): Likewise.
* decl.c (warn_extern_redeclared_static, duplicate_decls,
* identify_goto, check_previous_goto_1, check_goto, define_label,
check_tag_decl, start_decl, check_class_member_definition_namespace,
grokfndecl, grokdeclarator): Likewise.
* except.c (check_handlers): Likewise.
* typeck2.c (digest_init): Likewise.
* pt.c (check_specialization_namespace,
maybe_process_partial_specialization, check_explicit_specialization,
convert_template_argument, do_decl_instantiation,
do_type_instantiation, instantiate_decl): Likewise.
* semantics.c (finish_template_type_parm): Likewise.
* name-lookup.c (pushdecl_maybe_friend,
check_for_out_of_scope_variable): Likewise.
* decl2.c (finish_static_data_member_decl, build_anon_union_vars,
coerce_new_type): Likewise.
* parser.c (cp_parser_nested_name_specifier_opt,
cp_parser_mem_initializer, cp_parser_elaborated_type_specifier,
cp_parser_class_head, cp_parser_check_class_key): Likewise.
(cp_parser_parameter_declaration): Check flag_permissive instead of
* call.c (joust): Change pedwarn to warning.
* friend.c (make_friend_class): Likewise.
2008-06-16 Jan Hubicka <>
* method.c: Include cgraph.h.
(use_thunk): Use cgraph_add_new_function instead of calling backend
2008-06-15 Ralf Wildenhues <>
* parser.c: Fix comment typo.
2008-06-14 Simon Martin <>
PR c++/35320
* decl2.c (grokbitfield): Receive the list of attributes, pass it to
grokdeclarator and apply it to the created declaration.
* cp-tree.h (grokbitfield): Update prototype.
* parser.c (cp_parser_member_declaration): Don't apply the attributes
since they are now applied in grokbitfield. Adjusted the call to
(cp_parser_objc_class_ivars): Likewise.
2008-06-14 Simon Martin <>
PR c++/35317
* class.c (type_requires_array_cookie): Do not consider delete[]
operators with an ellipsis as second argument.
2008-06-09 Jakub Jelinek <>
PR c++/36408
* semantics.c (stmt_expr_value_expr): Don't crash on empty
2008-06-08 Paolo Carlini <>
PR c++/35242
* pt.c (maybe_process_partial_specialization): Check the tree
returned by push_template_decl for error_mark_node.
* parser.c (cp_parser_class_head): Likewise, check the tree
returned by the latter.
2008-06-07 Paolo Carlini <>
PR c++/35327
* decl.c (grokdeclarator): In case of wrong return type return
immediately error_mark_node.
2008-06-06 Jakub Jelinek <>
* cp-tree.h (cxx_omp_finish_clause, cxx_omp_create_clause_info,
dependent_omp_for_p, begin_omp_task, finish_omp_task,
finish_omp_taskwait): New prototypes.
(cxx_omp_clause_default_ctor): Add outer argument.
(finish_omp_for): Add new clauses argument.
* cp-gimplify.c (cxx_omp_finish_clause): New function.
(cxx_omp_predetermined_sharing): Moved from semantics.c, rewritten.
(cxx_omp_clause_default_ctor): Add outer argument.
(cp_genericize_r): Walk OMP_CLAUSE_LASTPRIVATE_STMT.
* cp-objcp-common.h (LANG_HOOKS_OMP_FINISH_CLAUSE): Define.
* parser.c (cp_parser_omp_for_loop): Parse collapsed for loops.
Add par_clauses argument. If decl is present in parallel's
lastprivate clause, change that clause to shared and add
a lastprivate clause for decl to OMP_FOR_CLAUSES.
Fix wording of error messages. Adjust finish_omp_for caller.
Add clauses argument. Parse loops with random access iterators.
(cp_parser_omp_clause_collapse, cp_parser_omp_clause_untied): New
(cp_parser_omp_for, cp_parser_omp_parallel): Adjust
cp_parser_omp_for_loop callers.
(cp_parser_omp_for_cond, cp_parser_omp_for_incr): New helper
(cp_parser_omp_clause_name): Handle collapse and untied
(cp_parser_omp_clause_schedule): Handle auto schedule.
(cp_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_COLLAPSE
(cp_parser_omp_task, cp_parser_omp_taskwait): New functions.
(cp_parser_omp_construct): Handle PRAGMA_OMP_TASK.
(cp_parser_pragma): Handle PRAGMA_OMP_TASK and
* pt.c (tsubst_omp_clauses): Handle OMP_CLAUSE_COLLAPSE and
(tsubst_omp_for_iterator): New function.
(dependent_omp_for_p): New function.
(tsubst_expr) <case OMP_FOR>: Use it. Handle collapsed OMP_FOR
loops. Adjust finish_omp_for caller. Handle loops with random
access iterators. Adjust for OMP_FOR_{INIT,COND,INCR} changes.
(tsubst_expr): Handle OMP_TASK.
* semantics.c (cxx_omp_create_clause_info): New function.
(finish_omp_clauses): Call it. Handle OMP_CLAUSE_UNTIED and
(cxx_omp_predetermined_sharing): Removed.
* semantics.c (finish_omp_for): Allow pointer iterators. Use
handle_omp_for_class_iterator and dependent_omp_for_p. Handle
collapsed for loops. Adjust c_finish_omp_for caller. Add new
clauses argument. Fix check for type dependent cond or incr.
Set OMP_FOR_CLAUSES to clauses. Use cp_convert instead of
fold_convert to convert incr amount to difference_type. Only
fold if not in template. If decl is mentioned in lastprivate
clause, set OMP_CLAUSE_LASTPRIVATE_STMT. Handle loops with random
access iterators. Adjust for OMP_FOR_{INIT,COND,INCR}
(finish_omp_threadprivate): Allow static class members of the
current class.
(handle_omp_for_class_iterator, begin_omp_task, finish_omp_task,
finish_omp_taskwait): New functions.
* parser.c (cp_parser_binary_expression): Add prec argument.
(cp_parser_assignment_expression): Adjust caller.
* cp-tree.h (outer_curly_brace_block): New prototype.
* decl.c (outer_curly_brace_block): No longer static.
2008-06-02 Paolo Carlini <>
PR c++/36404
* pt.c (push_template_decl_real): Consistently return error_mark_node
on error.
2008-06-02 Tomas Bily <>
* typeck.c (is_bitfield_expr_with_lowered_type): Use CASE_CONVERT.
(cp_build_unary_op): Likewise.
(cp_build_indirect_ref): Use CONVERT_EXPR_P.
(maybe_warn_about_returning_address_of_local): Likewise.
2008-05-29 Paolo Carlini <>
PR c++/35243
* pt.c (tsubst_initializer_list): Consistently check the tree
returned by tsubst_pack_expansion for error_mark_node.
2008-05-27 Michael Matz <>
PR c++/27975
* call.c (build_new_op): Make warning conditional on
2008-05-27 Alexandre Oliva <>
PR c++/35909
* call.c (convert_like_real): Convert bitfield to desired type
before creating temporary.
2008-05-26 Daniel Franke <>
* Adjusted dependencies on c-incpath.o.
2008-05-23 Jakub Jelinek <>
PR c++/36237
* cp-gimplify.c (cxx_omp_clause_apply_fn): Call
fold_build_cleanup_point_expr on build_call_a results.
PR c++/36308
* semantics.c (omp_clause_info_fndecl): New function.
(finish_omp_clauses): Use it.
2008-05-21 Jakub Jelinek <>
PR c++/36023
* cp-tree.h (check_array_initializer): New prototype.
* decl.c (check_array_initializer): New function.
(check_initializer): Call it.
* semantics.c (finish_compound_literal): Call it for ARRAY_TYPEs.
2008-05-21 Tom Tromey <>
* mangle.c (save_partially_mangled_name): Remove.
(restore_partially_mangled_name): Likewise.
(write_encoding): Update.
(write_unqualified_name): Likewise.
(start_mangling): Always use name_obstack. Remove 'ident_p'
(get_identifier_nocopy): Remove.
(finish_mangling_internal): Rename from finish_mangling.
(finish_mangling): New function.
(finish_mangling_get_identifier): Likewise.
(partially_mangled_name, partially_mangled_name_len): Remove.
(mangle_decl_string): Change return type. Update.
(mangle_decl, mangle_type_string, mangle_special_for_type,
mangle_ctor_vtbl_for_type, mangle_thunk, mangle_guard_variable,
mangle_ref_init_variable): Update.
2008-05-12 Paolo Carlini <>
PR c++/35331
* semantics.c (begin_class_definition): Extend checks on the first
2008-05-12 Tomas Bily <>
* typeck2.c (digest_init): Use CONVERT_EXPR_P.
* call.c (build_over_call): Likewise.
* error.c (dump_expr): Use CASE_CONVERT.
* class.c (fixed_type_or_null): Likewise.
2008-05-11 Volker Reichelt <>
* parser.c (cp_parser_omp_clause_reduction): Add missing "expected"
in error message.
(cp_parser_omp_clause_schedule): Remove superfluous "expected"
in error message.
2008-05-07 Kenneth Zadeck <>
* decl.c (duplicate_decls): Merge in DECL_PURE_P, TREE_READONLY,
* rtti.c (build_dynamic_cast_1): Rename DECL_IS_PURE to
2008-05-02 Simon Baldwin <>
PR bootstrap/36108
* typeck.c (build_array_ref): Remove warn_array_subscript_range.
2008-05-01 Simon Baldwin <>
* typeck.c (build_array_ref): Call warn_array_subscript_range.
2008-04-30 Jakub Jelinek <>
PR c++/35986
* pt.c (more_specialized_fn): Stop the loop even if there are no
arguments before ellipsis.
2008-04-29 Jakub Jelinek <>
PR c++/35650
* parser.c (cp_parser_lookup_name): Look through single function
PR c++/35987
* typeck.c (cp_build_modify_expr) <case PREINCREMENT_EXPR>: Don't build
COMPOUND_EXPR if the second argument would be error_mark_node.
2008-04-28 Jason Merrill <>
Liu Guanwei <>
PR c++/57
* parser.c (cp_parser_parameter_declaration): Handle < ambiguity
in default arguments.
2008-04-25 Jan Hubicka <>
* typeck.c (check_return_expr): Update.
* decl.c (start_preparsed_function): Update.
* method.c (use_thunk): Update.
2008-04-24 Jakub Jelinek <>
PR c++/35758
* cp-tree.h (cp_reconstruct_complex_type): New prototype.
* cp-objcp-common.h (LANG_HOOKS_RECONSTRUCT_COMPLEX_TYPE): Define.
* decl2.c (is_late_template_attribute): Only make vector_size
late tmpl attribute if argument is type or value dependent.
(cp_reconstruct_complex_type): New function.
2008-04-24 Richard Guenther <>
* typeck.c (cp_build_function_call): Call
2008-04-23 Paolo Bonzini <>
* typeck.c (get_member_function_from_ptrfunc): Don't set TREE_INVARIANT.
(build_ptrmemfunc1): Don't set TREE_INVARIANT.
* init.c (build_zero_init): Don't set TREE_INVARIANT.
* class.c (build_base_path): Don't set TREE_INVARIANT.
(build_vtbl_ref_1): Don't set TREE_INVARIANT.
(build_vtbl_initializer): Don't set TREE_INVARIANT.
* decl.c (build_enumerator): Don't set TREE_INVARIANT.
* rtti.c (tinfo_base_init): Don't set TREE_INVARIANT.
(generic_initializer): Don't set TREE_INVARIANT.
(ptr_initializer): Don't set TREE_INVARIANT.
(ptm_initializer): Don't set TREE_INVARIANT.
(class_initializer): Don't set TREE_INVARIANT.
* typeck2.c (process_init_constructor): Don't set TREE_INVARIANT.
* pt.c (push_inline_template_parms_recursive): Don't set TREE_INVARIANT.
(build_template_parm_index): Don't set TREE_INVARIANT.
(reduce_template_parm_level): Don't set TREE_INVARIANT.
(process_template_parm): Don't set TREE_INVARIANT.
2008-04-22 Jason Merrill <>
PR c++/35316
* semantics.c (finish_decltype_type): Check DECL_BIT_FIELD_TYPE
to see if DECL_BIT_FIELD_TYPE should be used, not some other flag.
* typeck.c (is_bitfield_expr_with_lowered_type): Likewise.
2008-04-22 Jakub Jelinek <>
PR c++/35747
* semantics.c (finish_stmt_expr): Call pop_stmt_list even if the stmt
expression is errorneous.
2008-04-21 Jason Merrill <>
PR c++/35325
* tree.c (cp_tree_equal): Handle FIXED_CST.
PR c++/35678
* pt.c (template_template_parm_bindings_ok_p): Set
processing_template_decl while in this function.
2008-04-18 Kris Van Hees <>
* cvt.c (type_promotes_to): Support char16_t and char32_t.
* decl.c (grokdeclarator): Disallow signed/unsigned/short/long on
char16_t and char32_t.
* lex.c (reswords): Add char16_t and char32_t (for c++0x).
* mangle.c (write_builtin_type): Mangle char16_t/char32_t as vendor
extended builtin type "u8char{16,32}_t".
* parser.c (cp_lexer_next_token_is_decl_specifier_keyword): Support
(cp_lexer_print_token): Support CPP_STRING{16,32}.
(cp_parser_is_string_literal): Idem.
(cp_parser_string_literal): Idem.
(cp_parser_primary_expression): Support CPP_CHAR{16,32} and
(cp_parser_simple_type_specifier): Support RID_CHAR{16,32}.
* tree.c (char_type_p): Support char16_t and char32_t as char types.
* typeck.c (string_conv_p): Support char16_t and char32_t.
2008-04-17 Jason Merrill <>
PR c++/35773
* call.c (build_user_type_conversion_1): Represent second step of
copy-init with an rvalue conversion.
(convert_like_real) [ck_user]: Don't implicitly add it here.
2008-04-15 Jakub Jelinek <>
PR c/35751
* decl.c (layout_var_decl): If extern or static var has variable
size, set TREE_TYPE (decl) to error_mark_node.
2008-04-16 Danny Smith <>
PR target/35921
* optimize.c (maybe_clone_body): Copy DECL_DLLIMPORT_P flag
to clone.
2008-04-09 Jason Merrill <>
PR c++/35708
* semantics.c (finish_compound_literal): Return a TARGET_EXPR,
not a pushed variable.
2008-04-09 Volker Reichelt <>
* call.c (build_op_delete_call): Fix quotation in warning message.
* decl.c (grokdeclarator): Quote keyword in error message.
* pt.c (check_for_bare_parameter_packs): Fix quotation in error
* parser.c (cp_parser_check_type_definition): Print error string
directly rather than using "%s".
(cp_parser_postfix_expression): Fix quotation.
(cp_parser_decltype): Likewise.
(cp_parser_sizeof_operand): Fix quotation. Simplify.
* parser.c (cp_parser_non_integral_constant_expression): Build error
message with CONCAT rather than using "%s".
(cp_parser_primary_expression): Fix quotation.
(cp_parser_postfix_expression): Likewise.
(cp_parser_postfix_dot_deref_expression): Likewise.
(cp_parser_unary_expression): Likewise.
(cp_parser_new_expression): Likewise.
(cp_parser_delete_expression): Likewise.
* parser.c (cp_parser_asm_specification_opt): Print CPP_CLOSE_PAREN
as `)', not as `('. Fix quotation.
(cp_parser_consume_semicolon_at_end_of_statement): Fix quotation.
(cp_parser_primary_expression): Likewise.
(cp_parser_nested_name_specifier_opt): Likewise.
(cp_parser_postfix_expression): Likewise.
(cp_parser_postfix_open_square_expression): Likewise.
(cp_parser_parenthesized_expression_list): Likewise.
(cp_parser_pseudo_destructor_name): Likewise.
(cp_parser_new_expression): Likewise.
(cp_parser_direct_new_declarator): Likewise.
(cp_parser_delete_expression): Likewise.
(cp_parser_cast_expression): Likewise.
(cp_parser_question_colon_clause): Likewise.
(cp_parser_builtin_offsetof): Likewise.
(cp_parser_trait_expr): Likewise.
(cp_parser_label_for_labeled_statement): Likewise.
(cp_parser_compound_statement): Likewise.
(cp_parser_selection_statement): Likewise.
(cp_parser_condition): Likewise.
(cp_parser_iteration_statement): Likewise.
(cp_parser_already_scoped_statement): Likewise.
(cp_parser_simple_declaration): Likewise.
(cp_parser_linkage_specification): Likewise.
(cp_parser_static_assert): Likewise.
(cp_parser_decltype): Likewise.
(cp_parser_conversion_function_id): Likewise.
(cp_parser_operator_function_id): Likewise.
(cp_parser_operator): Likewise.
(cp_parser_type_parameter): Likewise.
(cp_parser_template_id): Likewise.
(cp_parser_explicit_instantiation): Likewise.
(cp_parser_explicit_specialization): Likewise.
(cp_parser_enum_specifier): Likewise.
(cp_parser_namespace_definition): Likewise.
(cp_parser_namespace_alias_definition): Likewise.
(cp_parser_using_declaration): Likewise.
(cp_parser_using_directive): Likewise.
(cp_parser_asm_definition): Likewise.
(cp_parser_direct_declarator): Likewise.
(cp_parser_ptr_operator): Likewise.
(cp_parser_parameter_declaration_clause): Likewise.
(cp_parser_initializer_clause): Likewise.
(cp_parser_class_specifier): Likewise.
(cp_parser_member_specification_opt): Likewise.
(cp_parser_member_declaration): Likewise.
(cp_parser_pure_specifier): Likewise.
(cp_parser_constant_initializer): Likewise.
(cp_parser_base_clause): Likewise.
(cp_parser_exception_specification_opt): Likewise.
(cp_parser_try_block): Likewise.
(cp_parser_function_try_block): Likewise.
(cp_parser_handler): Likewise.
(cp_parser_throw_expression): Likewise.
(cp_parser_asm_operand_list): Likewise.
(cp_parser_attributes_opt): Likewise.
(cp_parser_label_declaration): Likewise.
(cp_parser_constructor_declarator_p): Likewise.
(cp_parser_template_declaration_after_export): Likewise.
(cp_parser_single_declaration): Likewise.
(cp_parser_objc_message_expression): Likewise.
(cp_parser_objc_message_args): Likewise.
(cp_parser_objc_encode_expression): Likewise.
(cp_parser_objc_defs_expression): Likewise.
(cp_parser_objc_protocol_expression): Likewise.
(cp_parser_objc_selector_expression): Likewise.
(cp_parser_objc_protocol_refs_opt): Likewise.
(cp_parser_objc_typename): Likewise.
(cp_parser_objc_method_keyword_params): Likewise.
(cp_parser_objc_superclass_or_category): Likewise.
(cp_parser_objc_try_catch_finally_statement): Likewise.
(cp_parser_objc_synchronized_statement): Likewise.
(cp_parser_objc_throw_statement): Likewise.
(cp_parser_omp_var_list_no_open): Likewise.
(cp_parser_omp_clause_default): Likewise.
(cp_parser_omp_clause_if): Likewise.
(cp_parser_omp_clause_num_threads): Likewise.
(cp_parser_omp_clause_reduction): Likewise.
(cp_parser_omp_clause_schedule): Likewise.
(cp_parser_omp_critical): Likewise.
(cp_parser_omp_for_loop): Likewise.
(cp_parser_omp_sections_scope): Likewise.
* parser.c (cp_parser_template_parameter_list): Simplify.
2008-04-07 James E. Wilson <>
* pt.c (tsubst_copy, case SIZEOF_EXPR): Initialize len.
2008-04-07 Jason Merrill <>
PR c++/35734
* class.c (type_has_user_nondefault_constructor): A template
counts as a nondefault constructor.
2008-04-04 Paolo Bonzini <>
* decl.c (cxx_push_function_context): Delete.
(cxx_pop_function_context): Delete.
(start_preparsed_function): Merge cxx_push_function_context (!f->decl
code only).
* cp-objcp-common.h (LANG_HOOKS_FUNCTION_INIT,
* cp-tree.h (cxx_push_function_context, cxx_pop_function_context):
Delete prototype.
* semantics.c (current_stmt_tree): Fix comment.
2008-04-03 Jakub Jelinek <>
PR c++/35741
* semantics.c (finish_offsetof): Undo effect of convert_from_reference
before calling fold_offsetof.
2008-04-03 Tom Tromey <>
* (c++_OBJS): New variable.
2008-04-03 Paolo Bonzini <>
* optimize.c (clone_body): New, from tree-inline.c.
2008-04-03 Paolo Bonzini <>
* method.c (synthesize_method): Use {push,pop}_function_context.
* name-lookup.c (push_to_top_level): Likewise.
* parser.c (cp_parser_late_parsing_for_member): Likewise.
2008-03-30 Volker Reichelt <>
PR c++/35578
* parser.c (cp_parser_decl_specifier_seq): Add location to error
2008-03-27 Tom Tromey <>
* Revert automatic dependency patch.
2008-03-27 Douglas Gregor <>
PR obj-c++/35704
* typeck.c (build_x_compound_expr): Use cp_build_compound_expr.
(build_compound_expr): New, for compatibility with C
(cp_build_compound_expr): Renamed from build_compound_expr.
(build_c_cast): New, for compatibility with C build_c_cast.
(cp_build_c_cast): Renamed from build_c_cast.
* init.c (build_vec_delete_1): Fix calls to build_compound_expr.
* decl.c (cxx_maybe_build_cleanup): Ditto.
* cp-tree.h (build_compound_expr): Add C-compatibile prototype.
(cp_build_compound_expr): Renamed from build_compound_expr.
(build_c_cast): Add C-compatible prototype.
(cp_build_c_cast): Renamed from build_c_cast.
* typeck2.c (build_functional_cast): Use cp_build_c_cast.
* parser.c (cp_parser_cast_expression): Fix call to build_c_cast.
2008-03-27 Douglas Gregor <>
* pt.c (tsubst_copy) <case SIZEOF_EXPR>: Cope with
tsubst_pack_expansion returning a pack expansion, or a TREE_VEC
ending in a pack expansion, both of which can occur when
substituting into a nested template.
(tsubst_copy_and_build) <case SIZEOF_EXPR>: When we're
instantiating the sizeof...(X) form, make tsubst_copy do the work.
* parser.c (cp_parser_template_parameter): Deal with unnamed
non-type template parameter packs identified by pack expansions in
the parameter type.
2008-03-26 Jakub Jelinek <>
PR c++/35546
* pt.c (apply_late_template_attributes): Don't call tsubst on
first attribute argument if it is IDENTIFIER_NODE.
PR c++/35332
* error.c (dump_expr): Pass {,UN}ORDERED_EXPR, UN{LT,LE,GT,GE,EQ}_EXPR
and LTGT_EXPR to pp_expression.
2008-03-26 Douglas Gregor <>
* pt.c (coerce_template_template_parm): Moved the body of the loop
of coerce_template_template_parms here, to make iteration over a
template argument pack simpler.
Also, allow matching of a template parameter pack in the template
template parameter to a template parameter in the template
template argument.
(coerce_template_template_parms): Deal with variadic template
template parameters. Use coerce_template_template_parm.
(unify): Make sure we coerce the template template argument's
template arguments to the template template parameter's template
parameters, not the other way around.
2008-03-25 Tom Tromey <>
* Remove .o targets.
(cp/g++spec.o): Moved to cp/. Reduce to variable setting.
(GXX_OBJS): Update.
(c++_OBJS): New variable.
2008-03-25 Douglas Gregor <>
* typeck.c (composite_pointer_type_r): Add SFINAE support.
(composite_pointer_type): Ditto.
(common_type): Fix call to composite_pointer_type.
(cxx_sizeof_nowarn): New; used to be a macro.
(cxx_sizeof_expr): Add SFINAE support.
(cxx_alignof_expr): Ditto.
(decay_conversion): Fix calls for SFINAE support.
(rationalize_conditional_expr): Add SFINAE support.
(build_class_member_access_expr): Ditto.
(finish_class_member_access_expr): Ditto.
(build_x_indirect_ref): Ditto.
(build_indirect_ref): Original version renamed to
cp_build_indirect_ref; new version provides a bridge from
(cp_build_indirect_ref): Was build_indirect_ref; added SFINAE
(get_member_function_from_ptrfunc): Fix calls for SFINAE support.
(build_function_call): Original version renamed to
cp_build_function_call; new version provides a bridge from
(cp_build_function_call): Was build_function_call; added SFINAE
(convert_arguments): Add SFINAE support.
(build_x_binary_op): Ditto.
(build_binary_op): Original version renamed to cp_build_binary_op;
new version provides a bridge from c-common.
(cp_build_binary_op): Was build_binary_op; added SFINAE support.
(pointer_diff): Fix calls for SFINAE.
(build_x_unary_op): Add SFINAE support.
(condition_conversion): Fix calls for SFINAE.
(build_unary_op): Original version renamed to cp_build_unary_op;
new version provides a bridge from c-common.
(cp_build_unary_op): Was build_unary_op; added SFINAE support.
(unary_complex_lvalue): Fix calls for SFINAE.
(build_x_conditional_expr): Add SFINAE support.
(build_x_compound_expr_from_list): Fix calls for SFINAE.
(build_x_compound_expr): Add SFINAE support.
(convert_ptrmem): Fix calls for SFINAE.
(build_static_cast_1): Add SFINAE support.
(build_static_cast): Ditto.
(build_reinterpret_cast_1): Ditto.
(build_reinterpret_cast): Ditto.
(build_const_cast_1): Ditto.
(build_const_cast): Ditto.
(build_c_cast): Ditto.
(build_modify_expr): Original version renamed to
cp_build_modify_expr; new version provides a bridge from c-common.
(cp_build_modify_expr): Was build_modify_expr; added SFINAE
(build_x_modify_expr): Add SFINAE support.
(build_ptrmemfunc): Fix calls for SFINAE.
(convert_for_assignment): Add SFINAE support.
(convert_for_initialization): Ditto.
(check_return_expr): Fix calls for SFINAE.
(lvalue_or_else): Add SFINAE support.
* init.c (perform_member_init): Fix calls for SFINAE.
(emit_mem_initializers): Ditto.
(expand_virtual_init): Ditto.
(expand_cleanup_for_base): Ditto.
(build_aggr_init): Add SFINAE support.
(expand_default_init): Ditto.
(expand_aggr_init_1): Fix calls for SFINAE.
(build_offset_ref): Ditto.
(build_new_1): Add SFINAE support.
(build_new): Ditto.
(build_vec_delete_1): Fix calls for SFINAE.
(get_temp_regvar): Ditto.
(build_vec_init): Add SFINAE support.
(build_dtor_call): Fix calls for SFINAE.
(build_delete): Ditto.
(push_base_cleanups): Ditto.
(build_vec_delete_1): Ditto.
* class.c (build_base_path): Fix calls for SFINAE.
(build_simple_base_path): Ditto.
(convert_to_base_statically): Ditto.
(build_vfn_ref): Ditto.
(resolve_address_of_overloaded_function): Ditto.
* decl.c (check_initializer): Fix calls for SFINAE.
(register_dtor_fn): Ditto.
(compute_array_index_type): Ditto.
(finish_enum): Ditto.
(start_preparsed_function): Ditto.
(cxx_maybe_build_cleanup): Ditto.
* call.c (convert_like): Add COMPLAIN argument.
(convert_like_with_context): Ditto.
(build_this): Fix calls for SFINAE.
(build_user_type_conversion): Ditto.
(resolve_args): Ditto.
(build_new_function_call): Add SFINAE support.
(build_operator_new_call): Fix calls for SFINAE.
(build_object_call): Add SFINAE support.
(build_conditional_expr): Ditto.
(build_new_op): Ditto.
(build_op_delete_call): Fix calls for SFINAE.
(build_temp): Ditto.
(convert_like_real): Add SFINAE support.
(build_x_va_arg): Fix calls for SFINAE.
(convert_default_arg): Ditto.
(build_over_call): Add SFINAE support.
(build_java_interface_fn_ref): Fix calls for SFINAE.
(build_special_member_call): Add SFINAE support.
(build_new_method_call): Ditto.
(perform_implicit_conversion): Ditto.
(perform_direct_initialization_if_possible): Ditto.
(initialize_reference): Fix calls for SFINAE.
* method.c (do_build_assign_ref): Fix calls for SFINAE.
* rtti.c (build_headof): Fix calls for SFINAE.
(get_tinfo_decl_dynamic): Ditto.
(get_typeid): Ditto.
(build_dynamic_cast_1): Add SFINAE support.
(build_dynamic_cast): Ditto.
(tinfo_base_init): Fix calls for SFINAE.
* except.c (do_get_exception_ptr): Fix calls for SFINAE.
(do_end_catch): Ditto.
(initialize_handler_parm): Ditto.
(expand_start_catch_block): Ditto.
(do_allocate_exception): Ditto.
(do_free_exception): Ditto.
(build_throw): Ditto.
* cvt.c (build_up_reference): Fix calls for SFINAE.
(convert_to_reference): Ditto.
(ocp_convert): Ditto.
(convert_to_void): Add SFINAE support.
* tree.c (build_dummy_object): Fix calls for SFINAE.
(stabilize_expr): Ditto.
* cp-tree.h (build_conditional_expr): Add tsubst_flags_t
(build_new_method_call): Ditto.
(build_special_member_call): Ditto.
(build_new_op): Ditto.
(perform_implicit_conversion): Ditto.
(perform_direct_initialization_if_possible): Ditto.
(convert_to_void): Ditto.
(build_aggr_init): Ditto.
(build_new): Ditto.
(build_vec_init): Ditto.
(build_dynamic_cast): Ditto.
(finish_call_expr): Ditto
(cxx_sizeof_or_alignof_expr): Add COMPLAIN parameter.
(cxx_sizeof_nowarn): Remove macro; add function declaration.
(build_class_member_access_expr): Add tsubst_flags_t parameter.
(finish_class_member_access_expr): Ditto.
(build_x_indirect_ref): Ditto.
(cp_build_indirect_ref): New.
(cp_build_function_call): Add tsubst_flags_t parameter.
(build_x_unary_op): Ditto.
(cp_build_unary_op): New.
(build_x_conditional_expr): Add tsubst_flags_t parameter.
(build_x_compound_expr): Ditto.
(build_compound_expr): Ditto.
(build_static_cast): Ditto.
(build_reinterpret_cast): Ditto.
(build_const_cast): Ditto.
(build_c_cast): Ditto.
(build_x_modify_expr): Ditto.
(cp_build_modify_expr): New.
(convert_for_initialization): Add tsubst_flags_t parameter.
(cp_build_binary_op): Remove macro; add function declaration.
(invalid_nonstatic_memfn_p): Add tsubst_flags_t parameter.
(lvalue_or_else): Ditto.
(build_functional_cast): Ditto.
* typeck2.c (digest_init): Fix calls for SFINAE.
(process_init_constructor_array): Ditto.
(process_init_constructor_record): Ditto.
(build_x_arrow): Ditto.
(build_m_component_ref): Ditto.
(build_functional_cast): Add SFINAE support.
* pt.c (tsubst_copy_and_build): Add (more) SFINAE support.
* semantics.c (simplify_loop_decl_cond): Fix calls for SFINAE.
(finish_expr_stmt): Ditto.
(finish_for_expr): Ditto.
(finish_asm_stmt): Ditto.
(finish_non_static_data_member): Ditto.
(finish_qualified_id_expr): Ditto.
(finish_call_expr): Add SFINAE support.
(finish_increment_expr): Fix calls for SFINAE.
(finish_unary_op_expr): Ditto.
(simplify_aggr_init_expr): Ditto.
(finish_omp_clauses): Ditto.
(finish_omp_for): Ditto.
(finish_omp_barrier): Ditto.
(finish_omo_flush): Ditto.
* decl2.c (grok_array_decl): Fix calls or SFINAE.
(build_anon_union_vars): Ditto.
(get_guard_cond): Ditto.
(set_guard): Ditto.
(one_static_initialization_or_destruction): Ditto.
(do_static_initialization_or_destruction): Ditto.
(generate_ctor_or_dtor_function): Ditto.
(build_offset_ref_call_from_tree): Ditto.
* parser.c (cp_parser_postfix_expression): Fix calls for SFINAE.
(cp_parser_postfix_dot_deref_expression): Ditto.
(cp_parser_unary_expression): Ditto.
(cp_parser_new_expression): Ditto.
(cp_parser_cast_expression): Ditto.
(cp_parser_binary_expression): Ditto.
(cp_parser_question_colon_clause): Ditto.
(cp_parser_assignment_expression): Ditto.
(cp_parser_expression): Ditto.
(cp_parser_builtin_offsetof): Ditto.
(cp_parser_template_argument): Ditto.
(cp_parser_functional_cast): Ditto.
2008-03-24 Tom Tromey <>
* lex.c (handle_pragma_interface): Don't copy the filename.
(handle_pragma_implementation): Copy filename using xstrdup.
2008-03-21 Paolo Carlini <>
* cp-tree.h (IS_AGGR_TYPE): Rename to MAYBE_CLASS_TYPE_P.
* typeck.c (unary_complex_lvalue, build_modify_expr,
convert_for_initialization): Adjust.
* init.c (is_aggr_type): Remove.
(is_class_type): Add.
(build_offset_ref, build_new_1, build_vec_delete_1, build_vec_init,
build_delete): Adjust.
* lex.c (make_aggr_type): Remove.
(make_class_type): Add.
(cxx_make_type): Adjust.
* class.c (finish_struct_1, fixed_type_or_null, is_empty_class):
* decl.c (build_typename_type, make_typename_type,
make_unbound_class_template, cxx_init_decl_processing,
check_tag_decl, groktypename, start_decl_1, layout_var_decl,
check_initializer, cp_finish_decl, build_ptrmemfunc_type, grokparms,
grok_op_properties, xref_tag, check_function_type): Adjust.
* call.c (check_dtor_name, standard_conversion, implicit_conversion,
add_builtin_candidate, add_builtin_candidates,
build_user_type_conversion_1, convert_like_real, build_cxx_call,
is_subseq, compare_ics): Adjust.
* method.c (use_thunk): Adjust.
* rtti.c (build_dynamic_cast_1, create_pseudo_type_info,
create_tinfo_types): Adjust.
* cvt.c (cp_convert_to_pointer, convert_to_pointer_force,
build_up_reference, convert_to_reference, convert_from_reference,
ocp_convert, build_expr_type_conversion): Adjust.
* tree.c (bind_template_template_parm, error_type): Adjust.
* dump.c (cp_dump_tree): Adjust.
* search.c (lookup_member): Adjust.
* friend.c (make_friend_class, do_friend): Adjust.
* typeck2.c (store_init_value, process_init_constructor_array,
process_init_constructor_record, build_x_arrow, build_m_component_ref,
build_functional_cast): Adjust.
* pt.c (finish_member_template_decl, process_template_parm,
lookup_template_class, tsubst_function_type, tsubst,
tsubst_copy_and_build, get_template_base, bt_instantiate_type_proc):
* semantics.c (begin_class_definition, finish_base_specifier,
finish_typeof, cxx_omp_predetermined_sharing, finish_decltype_type):
* name-lookup.c (constructor_name_p, push_overloaded_decl,
do_class_using_decl, lookup_qualified_name,
maybe_process_template_type_declaration): Adjust.
* decl2.c (grok_array_decl, check_member_template,
constrain_class_visibility): Adjust.
* parser.c (cp_parser_class_name): Adjust.
2008-03-18 Paolo Bonzini <>
2008-03-17 Jason Merrill <>
PR c++/35548
* call.c (reference_binding): Check LOOKUP_NO_TEMP_BIND when binding
a temp directly to a reference as per DR391.
2008-03-12 Richard Guenther <>
PR c++/35469
2008-02-04 Richard Guenther <>
PR java/35035
* decl.c (record_builtin_java_type): Make jboolean a
integer type again where its mode doesn't match that of bool.
2008-01-25 Richard Guenther <>
PR c++/33887
* decl.c (record_builtin_java_type): Make __java_boolean
a variant of bool.
* typeck.c (structural_comptypes): Move TYPE_FOR_JAVA check
after TYPE_MAIN_VARIANT check.
2008-03-10 Jakub Jelinek <>
PR c++/35328
* semantics.c (finish_omp_clauses): Look through NOP_EXPR even
if errorcount.
PR c++/35337
* semantics.c (finish_omp_clauses): Use %qD instead of %qE for
DECL_P in not a variable and appears more than once error messages.
2008-03-07 Paolo Bonzini <>
2008-02-06 Douglas Gregor <>
PR c++/35049
PR c++/35096
* typeck.c (structural_comptypes): Call cp_comptypes.
(comptypes): New; called from the C/C++ common bits to perform
strict checks.
(cp_comptypes): Renamed from comptypes, which is already used,
with a different signature, by the C++ front end.
(build_reinterpret_cast_1): Call cp_comptypes.
(ptr_reasonably_similar): Ditto.
* decl.c (decls_match): Ditto.
* cvt.c (convert_to_reference): Ditto.
* cp-tree.h (same_type_p): Ditto.
(same_or_base_type_p): Ditto.
(comptypes): Rename to cp_comptypes.
* pt.c (canonical_type_parameter): Call cp_comptypes.
2008-03-07 Paolo Bonzini <>
* cp-objcp-common.c (cxx_types_compatible_p): Remove obsolete
test for equivalence between pointer and references.
2008-03-02 Manuel Lopez-Ibanez <>
PR 24924
* class.c (finish_struct_anon): Use permerror instead of pedwarn.
(check_field_decls): Likewise.
(note_name_declared_in_class): Likewise.
* call.c (build_new_op): Likewise.
(convert_like_real): Likewise.
(build_over_call): Likewise.
* lex.c (unqualified_fn_lookup_error): Likewise.
* parser.c (cp_parser_template_id): Likewise.
* cvt.c (warn_ref_binding): Likewise.
(convert_to_reference): Likewise.
(ocp_convert): Likewise.
(convert_to_void): Use error instead of pedwarn.
* error.c (cp_cpp_error): Use pedantic_warning_kind.
* decl.c (compute_array_index_type): Use constant_expression_error.
2008-03-01 Douglas Gregor <>
* parser.c (cp_lexer_next_token_is_decl_specifier_keyword): Note
that auto is either a storage class or a simple type specifier,
depending on the dialect.
(cp_parser_decl_specifier_seq): Complain about `auto' as a storage
specifier in C++98 mode, error in C++0x mode (since we don't
support auto as a type specifier, yet).
(cp_parser_storage_class_specifier_opt): Don't treat `auto' as a
storage specifier in C++0x mode.
(cp_parser_simple_type_specifier): Parse `auto' as a
simple-type-specifier, but error because we don't support it yet.
2008-02-29 Manuel Lopez-Ibanez <>
* parser.c (cp_parser_nonclass_name): New.
(cp_parser_pseudo_destructor_name): Use it instead of
(cp_parser_type_name): Move code to cp_parser_nonclass_name.
2008-02-29 Tom Tromey <>
* parser.c (struct cp_token) <input_file_stack_index>: Remove.
(cp_lexer_get_preprocessor_token): Update.
(cp_lexer_set_source_position_from_token): Don't call
* lex.c (cxx_init): Don't use push_srcloc or pop_srcloc.
2008-02-28 Richard Guenther <>
2008-02-26 Richard Guenther <>
* decl.c (duplicate_decls): Remove decl from global mapping
before ggc_freeing it.
2008-02-27 Jakub Jelinek <>
PR c++/35368
* rtti.c: Include c-pragma.h.
(push_abi_namespace, pop_abi_namespace): New functions.
(build_dynamic_cast_1, tinfo_base_init, get_pseudo_ti_index,
create_tinfo_types, emit_support_tinfos): Use them.
* (cp/rtti.o): Depend on $(C_PRAGMA_H).
2008-02-26 Jason Merrill <>
PR c++/35315
* decl.c (grokdeclarator): Allow a typedef of an unnamed struct
to name the struct for linkage purposes even if it has attributes.
(start_decl): In that case, set ATTR_FLAG_TYPE_IN_PLACE.
2008-02-26 Tom Tromey <>
* parser.c (eof_token): Remove old location code.
(check_empty_body): Remove test of USE_MAPPED_LOCATION.
* decl2.c (generate_ctor_or_dtor_function): Remove old location
(cp_write_global_declarations): Likewise.
* lex.c (cxx_init): Remove old location code.
(handle_pragma_implementation): Remove test of
* pt.c (tsubst): Remove old location code.
* error.c (cp_print_error_function): Remove test of
* decl.c (pop_label): Remove old location code.
(finish_function): Likewise.
2008-02-26 Manuel Lopez-Ibanez <>
PR 26264
* call.c (magic_varargs_p): Remove BUILT_IN_STDARG_START.
2008-02-26 Richard Guenther <>
* decl.c (duplicate_decls): Remove decl from global mapping
before ggc_freeing it.
2008-02-26 Paolo Carlini <>
PR c++/35323
* name-lookup.c (arg_assoc_type): Handle FIXED_POINT_TYPE.
2008-02-26 Manuel Lopez-Ibanez <>
* typeck.c (build_class_member_access_expr): Add appropriate
OPT_W* parameter to warning.
(build_reinterpret_cast_1): Likewise.
* name-lookup.c (push_overloaded_decl): Likewise.
2008-02-25 Paolo Carlini <>
PR c++/35333
* error.c (dump_expr): Handle CONJ_EXPR.
2008-02-25 Paolo Carlini <>
PR c++/35338
* error.c (dump_type): Handle FIXED_POINT_TYPE.
(dump_expr): Handle FIXED_CST.
2008-02-24 Jason Merrill <>
* parser.c (cp_parser_declaration): Handle "inline namespace".
(cp_parser_namespace_definition): Likewise.
PR c++/33486
* name-lookup.c (arg_assoc_namespace): Look down into inline
namespaces, too.
2008-02-23 Manuel Lopez-Ibanez <>
* typeck.c (check_for_casting_away_constness): Use 1 single
argument, the type of cast, to decide what diagnostics generate.
(build_static_cast_1): Remove unused code. Update call to
(build_reinterpret_cast_1): Update call to
(build_const_cast_1): Likewise.
2008-02-24 Paolo Carlini <>
* error.c (dump_expr): Don't deal directly with NEW_EXPR (and
VEC_NEW_EXPR), forward to pp_expression.
* cxx-pretty-print.c (pp_cxx_new_expression): Fix FIXME.
2008-02-24 Danny Smith <>
PR c++/34749
* friend.c (do_friend): Call cplus_decl_attributes earlier.
2008-02-22 Andrew Pinski <>
PR C++/34715
* decl.c (duplicate_decls): Merge DECL_DISREGARD_INLINE_LIMITS for
template decls' function decl.
2008-02-22 Paolo Carlini <>
PR c++/35282
2008-02-14 Paolo Carlini <>
PR c++/28743
* pt.c (determine_specialization): In case of function templates,
when the type of DECL does not match FN there is no match.
2008-02-22 Ralf Wildenhues <>
PR c/19999
* typeck.c (build_binary_op): Warn about floating point
comparisons if FLOAT_TYPE_P, not only for REAL_TYPE.
2008-02-19 Jason Merrill <>
PR c++/34950
* pt.c (resolve_overloaded_unification): Set processing_template_decl
while we look for possible bindings.
2008-02-19 Jakub Jelinek <>
PR c++/35028
* cp-gimplify.c (cxx_omp_clause_apply_fn): Handle vararg copy ctors.
PR c++/34964
PR c++/35244
* semantics.c (finish_omp_threadprivate): Do nothing for error_operand_p
vars. Afterwards ensure v is VAR_DECL.
PR c++/35078
* parser.c (cp_parser_omp_for_loop): If DECL has REFERENCE_TYPE, don't
call cp_finish_decl.
* semantics.c (finish_omp_for): Fail if DECL doesn't have integral type
2008-02-15 Douglas Gregor <>
PR c++/35023
PR c++/35024
PR c++/35026
* pt.c (finish_member_template_decl): If the type in a TYPE_DECL
is error_mark_node, return an error early.
(find_parameter_packs_r): Pass the pointer set along to recursive
calls of cp_walk_subtrees; don't try to manage the pointer set
(uses_parameter_packs): Pass the pointer set to cp_walk_tree.
(make_pack_expansion): Ditto.
(check_for_bare_parameter_packs): Ditto. Also, don't bother taking
a second pass through the tree with find_parameter_packs_r; that
second pass no longer does anything.
(push_template_decl_real): If we have an erroneous declaration,
set its type to error_mark_node before returning an error.
2008-02-14 Douglas Gregor <>
PR c++/34050
* pt.c (tsubst_initializer_list): Deal with the use of
VOID_TYPE_NODE to indicate value-initialization of the bases.
2008-02-14 Manuel Lopez-Ibanez <>
Jason Merrill <>
PR c++/5645
PR c++/11159
* class.c (type_has_user_nondefault_constructor): New fn.
* cp-tree.h: Declare it.
* init.c (emit_mem_initializers): Use it for -W warning about
missing base initializer.
2008-02-14 Paolo Carlini <>
PR c++/28743
* pt.c (determine_specialization): In case of function templates,
when the type of DECL does not match FN there is no match.
2008-02-13 Jakub Jelinek <>
Manuel Lopez-Ibanez <>
PR c++/35138
* parser.c (cp_parser_pseudo_destructor_name): If next tokens
are not identifier :: ~, return before calling cp_parser_type_name.
2008-02-13 Jason Merrill <>
PR c++/34962, c++/34937, c++/34939
* decl2.c (is_late_template_attribute): Always defer attributes
vector_size and weak.
PR c++/34774
* pt.c (value_dependent_expression_p): Look into DECL_INITIAL
of enumerators, too.
2008-02-12 Jason Merrill <>
PR c++/34824
* call.c (convert_like_real): Pass LOOKUP_NO_CONVERSION to build_temp
if we're doing conversions to call a user-defined conversion function.
2008-02-12 Steven Bosscher <>
PR c++/29048
* semantics.c (finish_qualified_id_expr): Avoid duplicate access
check here, too.
2008-02-12 Jakub Jelinek <>
PR c++/34862
* init.c (build_new_1): Don't create placement_expr before
constructing alloc_call. Verify that the pointer is passed by
value to operator new.
2008-02-11 Jason Merrill <>
PR c++/35097
* pt.c (tsubst): Don't look up a template typedef in an explicit
2008-02-11 Douglas Gregor <>
PR c++/35113
* tree.c (cp_build_qualified_type_real): When building a
cv-qualified array type, build it as a unique type with
build_cplus_array_type_1 and then adopt the unqualified type's
main variant.
2008-02-11 Paolo Carlini <>
PR c++/35077
* decl.c (groktypename): Check grokdeclarator return.
2008-02-10 Jason Merrill <>
PR c++/34094
* decl2.c (cp_write_global_declarations): Don't write out static
data members with DECL_IN_AGGR_P set.
2008-02-08 Jason Merrill <>
PR c++/35116
* tree.c (build_target_expr_with_type): Handle void initializer.
(bot_manip): Remap slot before recursing.
2008-02-06 Kaveh R. Ghazi <>
PR other/35107
* (cc1plus-dummy, cc1plus): Add $(GMPLIBS).
2008-02-06 Alexandre Oliva <>
PR c++/35056
* tree.c: Include tree-flow.h.
(build_target_expr): Check type compatibility.
* (cp/tree.o): Depend on $(TREE_FLOW_H).
* call.c (convert_like_real): Convert bitfield to expected type.
2008-02-06 Douglas Gregor <>
PR c++/35049
PR c++/35096
* typeck.c (structural_comptypes): Call cp_comptypes.
(comptypes): New; called from the C/C++ common bits to perform
strict checks.
(cp_comptypes): Renamed from comptypes, which is already used,
with a different signature, by the C++ front end.
(build_reinterpret_cast_1): Call cp_comptypes.
(ptr_reasonably_similar): Ditto.
* decl.c (decls_match): Ditto.
* cvt.c (convert_to_reference): Ditto.
* cp-tree.h (same_type_p): Ditto.
(same_or_base_type_p): Ditto.
(comptypes): Rename to cp_comptypes.
* pt.c (canonical_type_parameter): Call cp_comptypes.
2008-02-05 Jakub Jelinek <>
PR c++/33553
* pt.c (tsubst) <case INTEGER_TYPE>: Don't issue error if max is
value dependent expression.
2008-02-05 Douglas Gregor <>
PR c++/35074
* decl2.c (save_template_attributes): When we're modifying the
TYPE_MAIN_VARIANT to add new attributes, be sure to also modify
all of the other variants to add those same attributes. Otherwise,
the main variant will be inconsistent with those other variants.
2008-02-04 Richard Guenther <>
PR java/35035
* decl.c (record_builtin_java_type): Make jboolean a
integer type again where its mode doesn't match that of bool.
2008-02-02 Jason Merrill <>
Mark Mitchell <>
PR c++/33916
* init.c (build_value_init_1): New function.
(build_value_init): New function.
* typeck2.c (build_functional_cast): Call it.
* cp-gimplify.c (cp_gimplify_init_expr): Handle its output.
* cp-tree.h (TYPE_HAS_USER_CONSTRUCTOR): Rename from
* class.c (finish_struct_bits, maybe_warn_about_overly_private_class,
add_implicitly_declared_members): Adjust.
(check_field_decls): Adjust. Remove warnings about reference/const
in class without constructor.
(check_bases_and_members): Adjust. Give those warnings here instead.
* decl.c (fixup_anonymous_aggr): Adjust.
(check_initializer): Adjust, clarify logic slightly.
(grok_special_member_properties): Adjust, only set if user-provided.
* rtti.c (create_tinfo_types): Don't set.
* cvt.c (ocp_convert): Remove exception for vtable_entry_type et al.
Use same_type_ignoring_top_level_qualifiers_p.
* pt.c (check_explicit_specialization): Adjust.
(instantiate_class_template): Adjust.
2008-01-31 Douglas Gregor <>
Jakub Jelinek <>
PR c++/34935
PR c++/34936
* typeck.c (structural_comptypes): Handle comparisons of
REAL_TYPE nodes.
* mangle.c (write_builtin_type): Map down to the canonical type,
which will be one of the predefined type nodes.
2008-01-29 Michael Meissner <>
PR 35004
* cp-tree.h (struct full_lang_decl): Make tree_code bitfield 16
bits to allow for expansion of the number of middle end tree
2008-01-29 Douglas Gregor <>
PR c++/34055
PR c++/34103
PR c++/34219
PR c++/34606
PR c++/34753
PR c++/34754
PR c++/34755
PR c++/34919
PR c++/34961
* typeck.c (check_return_expr): Tweak call to
* class.c (add_method): Be careful with error_mark_nodes.
* cp-tree.h (check_for_bare_parameter_packs): Remove "*" from
* pt.c (struct find_parameter_pack_data): Remove
(find_parameter_packs_r): Don't use SET_PACKS_TO_ERROR.
(uses_parameter_packs): Don't set SET_PACKS_TO_ERROR.
(make_pack_expansion): Ditto.
(check_for_bare_parameter_packs): Parameter is now a tree, not a
(process_template_parm): Tweak call to
(push_template_decl_real): Tweak calls to
check_for_bare_parameter_packs. If bare parameter packs are found
in the list of exceptions, clear out that list after giving an
* semantics.c (finish_cond): Tweak call to
(finish_expr_stmt): Ditto.
(finish_for_expr): Ditto.
(finish_switch_cond): Ditto.
(finish_mem_initializers): Ditto.
(finish_member_declaration): Ditto.
(finish_static_assert): Check for bare parameter packs in the
* decl2.c (cplus_decl_attributes): Check for bare parameter packs in the
attributes of a declaration.
* parser.c (cp_parser_using_declaration): Tweak call to
(cp_parser_base_clause): Ditto.
2008-01-28 Jason Merrill <>
PR c++/35007
* class.c (build_base_path): Fix !want_pointer case.
2008-01-27 Jason Merrill <>
PR c++/27177
* class.c (build_base_path): Fix previous change.
2008-01-26 Jakub Jelinek <>
PR c++/34965
* error.c (dump_expr): Handle TRUTH_AND_EXPR, TRUTH_OR_EXPR
2008-01-26 Richard Guenther <>
PR c++/34235
* typeck.c (build_binary_op): Remove code to shorten compares.
2008-01-25 Richard Guenther <>
PR c++/33887
* decl.c (record_builtin_java_type): Make __java_boolean
a variant of bool.
* typeck.c (structural_comptypes): Move TYPE_FOR_JAVA check
after TYPE_MAIN_VARIANT check.
2008-01-25 Jason Merrill <>
PR c++/27177
* class.c (build_base_path): Don't mess with virtual access if
* call.c (standard_conversion): Don't check whether source type
is complete.
* decl2.c (is_late_template_attribute): Don't defer attribute
visibility just because the type is dependent.
2008-01-25 Jason Merrill <>
Mark Mitchell <>
PR c++/31780
* call.c (standard_conversion): Allow conversion from integer/real
to complex.
(compare_ics): Such a conversion is worse than a normal arithmetic
2008-01-25 Richard Guenther <>
PR c++/33887
to true.
2008-01-24 Paolo Carlini <>
PR c++/34603
* pt.c (push_template_decl_real): Return error_mark_node in case
of template definition of non-template.
2008-01-24 Jason Merrill <>
PR c++/34913
* decl2.c (is_late_template_attribute): Defer any attribute with
dependent args. Also defer type attributes if the type is dependent.
2008-01-22 Jakub Jelinek <>
Alexandre Oliva <>
PR c++/33984
* call.c (reference_binding): For bitfields use the declared bitfield
(add_builtin_candidates): Likewise.
* class.c (layout_class_type): For bitfields copy over the
original type quals.
2008-01-22 Jason Merrill <>
PR c++/28560
* decl.c (groktypename): Also ignore attributes on dependent
possibly-class types.
PR c++/34912
* friend.c (do_friend): Check for prior declaration of a friend
function of a local class.
* name-lookup.c (lookup_name_innermost_nonclass_level):
No longer static.
* name-lookup.h: Declare it.
2008-01-22 Tom Tromey <>
PR c++/34829:
* init.c (build_new_1): Only disallow Java aggregates.
2008-01-22 Jakub Jelinek <>
PR c++/34607
* semantics.c (finish_omp_for): Don't call c_finish_omp_for
if decl or init is error_mark_node.
PR c++/34918
* error.c (dump_expr): Handle VECTOR_CST.
2008-01-21 Jason Merrill <>
PR c++/33959
* pt.c (tsubst_aggr_type): Make sure our context is complete.
PR c++/34573
* pt.c (retrieve_local_specialization): Robustify.
(tsubst_pack_expansion, tsubst_decl): Remove redundant checks.
PR c++/34846
* pt.c (tsubst): Only call retrieve_local_specialization if the
original typedef was in a function template.
PR c++/34196
* decl.c (wrap_cleanups_r): Set TRY_CATCH_IS_CLEANUP.
2008-01-21 Richard Guenther <>
PR c++/34850
* error.c (cp_print_error_function): Deal with recursive
BLOCK trees.
2008-01-20 Paolo Carlini <>
PR c++/34891
* error.c (dump_expr): Deal with VIEW_CONVERT_EXPR.
2008-01-20 Paolo Carlini <>
PR c++/34776
PR c++/34486
* name-lookup.c (do_class_using_decl): Do not call constructor_name_p
on non-IS_AGGR_TYPE scope.
(constructor_name_p): Assert IS_AGGR_TYPE.
2008-01-18 Ian Lance Taylor <>
PR c++/33407
* decl.c (duplicate_decls): Copy DECL_IS_OPERATOR_NEW flag.
(grok_op_properties): For NEW_EXPR and VEC_NEW_EXPR set
2008-01-16 Richard Guenther <>
PR c++/33819
* typeck.c (is_bitfield_expr_with_lowered_type): Recurse
for conversions to type variants.
2008-01-15 Andreas Tobler <>
* parser.c (cp_parser_template_parameter): Fix C90 issue with mixing
declaration and code. Update copyright year.
2008-01-15 Douglas Gregor <>
PR c++/34399
* friend.c (do_friend): Don't query TYPE_BEING_DEFINED unless we
know we have a class type.
2008-01-15 Douglas Gregor <>
PR c++/34751
* pt.c (coerce_template_parameter_pack): When substituting into
the type of a non-type template parameter pack. use the
deduced/substituted arguments.
* parser.c (declarator_can_be_parameter_pack): A pointer-to-member
can be a parameter pack with the ellipsis following it. When we
have an erroneous declaration, allow it to be a parameter pack.
(cp_parser_template_parameter): Complain about default
arguments on non-type template parameter packs, and parse them
using the new cp_parser_default_argument.
(cp_parser_parameter_declaration): Complain about parameter packs
with default arguments. Move parsing of default arguments into a
new function, cp_parser_default_argument.
(cp_parser_default_argument): New; extracted from
2008-01-15 Douglas Gregor <>
PR c++/34051
PR c++/34055
PR c++/34102
PR c++/34103
* typeck.c (check_return_expr): If there are bare parameter packs
in the return value, set it to error_mark_node.
* tree.c (cp_walk_subtrees): Walk USING_DECL nodes.
* pt.c (find_parameter_packs_r): Look at the type of
IDENTIFIER_NODEs (e.g., for user-defined conversions).
(check_for_bare_parameter_packs): Flip the result: now returns
TRUE when there were bare parameter packs, FALSE otherwise.
(push_template_decl_real): Deal with flipped result of
* semantics.c (finish_cond): If there are bare parameter packs in
the conditional, set it to error_mark_node.
(finish_expr_stmt): If there are bare parameter packs in the
expression, set it to error_mark_node.
(finish_for_expr): Ditto.
(finish_switch_cond): If there are bare parameter packs in
the conditional, set it to error_mark_node.
(finish_mem_initializers): If there are bare parameter packs in
the member initializer, set it to error_mark_node.
(finish_member_declaration): Check the attributes of the
declaration for bare parameter packs, and remove the attributes if
any have bare parameter packs.
* parser.c (cp_parser_using_declaration): Check the using
declaration for bare parameter packs.
(cp_parser_base_clause): If there are bare parameter packs in a
base specifier, don't add it to the chain.
2008-01-15 Douglas Gregor <>
PR c++/34314
* error.c (dump_simple_decl): Display ellipsis for template
non-type parameter packs.
(dump_decl): Display ellipsis for template type parameter packs.
(dump_template_decl): Display ellipsis for template template
parameter packs.
* pt.c (redeclare_class_template): When redeclaring a class
template, check for collisions between template parameters and
template parameter packs.
2008-01-15 Douglas Gregor <>
PR c++/33964
* pt.c (process_partial_specialization): Don't mark template
parameters that occur in non-deduced contexts.
(struct pair_fn_data): Add include_nondeduced_p.
(for_each_template_parm_r): Only visit non-deduced contexts if
include_nondeduced_p is set.
(for_each_template_parm): Added parameter include_nondeduced_p,
which states whether template parameters found in non-deduced
contexts should be visited.
(uses_template_parms): Visit all template parameters, even those
in non-deduced contexts.
2008-01-15 Douglas Gregor <>
PR c++/34052
* pt.c (check_default_tmpl_args): Check for parameter packs that
aren't at the end of a primary template.
(push_template_decl_real): Remove check for parameter packs that
aren't at the end of a primary template; that now happens in
* semantics.c (finish_template_template_parm): Use
check_default_tmpl_args to check for errors in the template
parameter list.
2008-01-12 Doug Kwan <>
* decl.c: (grokdeclarator): Use OPT_Wignored_qualifiers
instead of OPT_Wreturn_type in warning due to ignored return type
* pt.c: (tsubst_function_type): Use OPT_Wignored_qualifiers
instead of OPT_Wreturn_type in warning due to ignored return type
2008-01-08 Jakub Jelinek <>
PR c++/33890
* semantics.c (finish_omp_for): Don't call
fold_build_cleanup_point_expr if processing_template_decl.
2008-01-04 Paolo Carlini <>
Jakub Jelinek <>
PR c++/34611
* error.c (dump_template_argument): Deal with TREE_LIST.
2008-01-01 Douglas Gregor <>
* parser.c (cp_parser_check_decl_spec): Don't warn about "long
long" in C++0x mode; change the warning to note that "long long"
is only unsupported in C++98 mode.
Copyright (C) 2008 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.