2006-12-31 Simon Martin PR c++/29731 * parser.c (cp_parser_primary_expression): Return error_mark_node when a statement-expression is found outside of a function body. 2006-12-28 Kazu Hirata * cp-tree.h (TYPE_NAMESPACE_SCOPE_P, TYPE_FUNCTION_SCOPE_P): Remove. * decl2.c: Fix a comment typo. 2006-12-21 Andrew Pinski PR C++/30225 * decl.c (cxx_builtin_function): Only copy the decl if adding it to the std namespace. 2006-12-21 Andrew Pinski PR C++/30168 * optimize.c (update_cloned_parm): Copy DECL_GIMPLE_REG_P also. 2006-12-22 Kazu Hirata * decl.c: Fix a coment typo. 2006-12-18 Ian Lance Taylor * decl.c (start_preparsed_function): Add support for -Wmissing-declarations. 2006-12-16 Simon Martin PR c++/29475 * cp-tree.h (struct deferred_access_check): New structure to represent a deferred access check. It replaces the previous representation as a tree. (get_deferred_access_checks): Return a vector of struct deferred_access_check instead of a tree list. (perform_access_checks): Take a vector of struct deferred_access_check instead of a tree list. * semantics.c (struct deferred_access): Store the deferred access checks as a vector of struct deferred_access_check instead of a tree list. (push_deferring_access_checks): Handle the change in struct deferred_access. (get_deferred_access_checks): Likewise. (pop_to_parent_deferring_access_checks): Likewise. (perform_or_defer_access_check): Likewise. (perform_access_checks): Take a vector of struct deferred_access_check instead of a tree list. * parser.c (struct tree_check): New structure to store various data associated with a CPP_NESTED_NAME_SPECIFIER or CPP_TEMPLATE_ID token. (struct cp_token): Changed the value field to be a union with a pointer to a struct tree_check for CPP_NESTED_NAME_SPECIFIER or CPP_TEMPLATE_ID tokens and a tree field for all other tokens. (eof_token): Adjusted due to the change in struct cp_token. (cp_lexer_get_preprocessor_token): Likewise. (cp_lexer_purge_token): Likewise. (cp_lexer_purge_tokens_after): Likewise. (cp_lexer_print_token): Likewise. (cp_parser_error): Likewise. (cp_parser_identifier): Likewise. (cp_parser_string_literal): Likewise. (cp_parser_primary_expression): Likewise. (cp_parser_unqualified_id): Likewise. (cp_parser_parenthesized_expression_list): Likewise. (cp_parser_storage_class_specifier_opt): Likewise. (cp_parser_function_specifier_opt): Likewise. (cp_parser_type_specifier): Likewise. (cp_parser_simple_type_specifier): Likewise. (cp_parser_initializer_list): Likewise. (cp_parser_member_specification_opt): Likewise. (cp_parser_attribute_list): Likewise. (cp_parser_objc_expression): Likewise. (cp_parser_objc_protocol_qualifiers): Likewise. (cp_parser_objc_selector): Likewise. (cp_parser_objc_declaration): Likewise. (cp_parser_objc_statement): Likewise. (cp_parser_omp_clause_name): Likewise. (cp_parser_omp_clause_default): Likewise. (cp_parser_omp_clause_schedule): Likewise. (cp_parser_omp_parallel): Likewise. (cp_parser_initial_pragma): Likewise. (pragma_lex): Likewise. (cp_parser_pre_parsed_nested_name_specifier): Likewise. (cp_parser_nested_name_specifier_opt): Likewise. Use cp_token::u::tree_check_value to save the token's value, the associated deferred checks and its qualifying scope. (cp_parser_template_id): Likewise. (cp_parser_template_declaration_after_export): Adjusted the call to get_deferred_access_checks. (cp_parser_init_declarator): Take the access checks as a vector of struct deferred_access_check instead of a tree list. (cp_parser_single_declaration): Likewise. (cp_parser_perform_template_parameter_access_checks): Likewise. (cp_parser_simple_declaration): Adjusted the call to cp_parser_init_declarator. (cp_parser_explicit_specialization): Adjusted the call to cp_parser_single_declaration. 2006-12-13 Ian Lance Taylor PR c++/19564 PR c++/19756 * parser.c (cp_parser_expression_stack_entry): Add field lhs_type. (cp_parser_binary_expression): Track tree code of left hand side of expression. Use it when calling build_x_binary_op. (cp_parser_selection_statement): Add if_p parameter. Change all callers. Warn about ambiguous else. (cp_parser_statement): Add if_p parameter. Change all callers. (cp_parser_implicitly_scoped_statement): Likewise. * typeck.c (build_x_binary_op): Add parameters arg1_code and arg2_code. Change all callers. Call warn_about_parentheses. * cp-tree.h (build_x_binary_op): Update declaration. 2006-12-12 Manuel Lopez-Ibanez * decl.c (build_enumerator): Update error message to match C front-end. 2006-12-11 Jan Hubicka * decl2.c (var_finalized_p): Update for renamed varpool functions. 2006-12-09 Zack Weinberg * parser.c (yydebug, enum pragma_omp_clause): Delete. 2006-12-07 Mark Mitchell PR c++/29732 * cp-tree.h (DECL_USE_TEMPLATE): Mention partial specializations. (explicit_class_specialization_p): Declare. * pt.c (explicit_class_specialization_p): New function. * parser.c (cp_parser_init_declarator): Check correct number of template parameters for in-class function definitions. (cp_parser_check_declrator_template_parameters): Stop looking for template classes when we find an explicit specialization. 2006-12-07 Lee Millward PR c++/29980 * cp_parser_elaborated_type_specifier: Check the return value of check_elaborated_type_specifier. 2006-12-06 Mark Mitchell PR c++/29730 * parser.c (cp_parser_init_declarator): Reject initialization of functions. 2006-12-05 Mark Mitchell PR c++/29729 * decl2.c (check_member_template): Move check for member templates in local classes to ... * parser.c (cp_parser_template_declaration_after_export): ... here. PR c++/29728 * decl.c (check_array_designated_initializer): New function. (maybe_deduce_size_from_array_init): Use it. (reshape_init_array): Likewise. 2006-12-05 Aldy Hernandez Merge from gimple-tuples-branch. 2006-10-05 Aldy Hernandez * cp-gimplify.c (cp_gimplify_expr): Adjust for GIMPLE_MODIFY_STMT. (cxx_omp_clause_apply_fn): Adjust for GIMPLE_MODIFY_STMT. (cxx_omp_clause_copy_ctor): Same. (cxx_omp_clause_assign_op): Same. 2006-09-28 Aldy Hernandez * cp-tree.h (union lang_tree_node): Gimple statements do not have a TREE_CHAIN. (TREE_INDIRECT_USING): Look in base. 2006-12-04 Jan Hubicka * cp-objcp-common.c (cp_expr_size): Return NULL in the case size is undefined. 2006-12-04 Mark Mitchell PR c++/29733 * pt.c (tsubst_decl): Disallow variables of function type. PR c++/29632 * call.c (add_builtin_candidate): Do not permit NULL pointer constants to be compared with template parameters. 2006-12-04 Eric Botcazou * pt.c (for_each_template_parm_r) : New case. Call for_each_template_parm on TYPE_MIN_VALUE and TYPE_MAX_VALUE. 2006-12-03 Richard Henderson Andrew Pinski PR C++/14329 * error.c (cp_printer) <'D'>: Handle DECL_DEBUG_EXPR. 2006-12-02 Andrew Pinski PR C++/30033 * decl.c (cp_tree_node_structure): Handle STATIC_ASSERT. 2006-12-02 Kazu Hirata * name-lookup.c: Follow spelling conventions. 2006-12-01 Geoffrey Keating * decl.c (poplevel): Check DECL_INITIAL invariant. (duplicate_decls): Preserve DECL_INITIAL when eliminating a new definition in favour of an old declaration. (start_preparsed_function): Define and document value of DECL_INITIAL before and after routine. (finish_function): Check DECL_INITIAL invariant. * parser.c (cp_parser_function_definition_from_specifiers_and_declarator): Skip duplicate function definitions. 2006-12-01 Volker Reichelt PR c++/30022 * typeck.c (type_after_usual_arithmetic_conversions): Fix assertion for vector types. (build_binary_op): Use temporary for inner type of vector types. 2006-12-01 Ryan Mansfield PR c++/29066 * typeck.c (build_binary_op): Fix pointer to member function comparison for ptrmemfunc_vbit_in_delta targets. 2006-12-01 Dirk Mueller PR c++/18313 * decl.c (grokdeclarator): Warn for type qualifiers on return type for non-dependent types. * pt.c (tsubst_function_type): Warn for type qualifiers on return type for dependent types. 2006-11-30 Geoffrey Keating * rtti.c (get_tinfo_decl): Handle return value from pushdecl_top_level_and_finish. 2006-11-29 Lee Millward PR c++/29022 * parser.c (cp_parser_class_head): Move processing of any base classes to... (cp_parser_class_specifier) ...here. Take an extra tree* parameter for any base classes. Only process them if the opening brace was found. 2006-11-28 Jakub Jelinek PR c++/29735 * decl.c (grokfndecl): Check main's type after applying attributes, not before. 2006-11-27 Mark Mitchell * class.c (build_vcall_offset_vtbl_entries): Do not add vcall entries for a primary construction virtual table. 2006-11-26 Mark Mitchell PR c++/29886 * parser.c (cp_parser): Add in_function_body. (cp_parser_new): Initialize it. (cp_parser_primary_expression): Use parser->in_function_body instead of at_function_scope_p. (cp_parser_asm_definition): Likewise. (cp_parser_direct_declarator): Likewise. (cp_parser_class_specifier): Clear parser->in_function_body. (cp_parser_constructor_declarator_p): Use parser->in_function_body instead of at_function_scope_p. (cp_parser_function_body_after_declarator): Set parser->in_function_body. 2006-11-21 Douglas Gregor * cp-tree.def (STATIC_ASSERT): New. * cp-objcp-common.c (cp_tree_size): Handle STATIC_ASSERT. * error.c (dump_decl): Handle STATIC_ASSERT. * cp-tree.h (STATIC_ASSERT_CONDITION): New. (STATIC_ASSERT_MESSAGE): New. (STATIC_ASSERT_SOURCE_LOCATION): New. (struct tree_static_assert): New. (enum cp_tree_node_structure_enum): Add TS_CP_STATIC_ASSERT. (union lang_tree_node): Add static_assertion. (finish_static_assert): Declare. * cxx-pretty-print.c (pp_cxx_statement): Handle STATIC_ASSERT. (pp_cxx_declaration): Handle STATIC_ASSERT. * pt.c (instantiate_class_template): Handle STATIC_ASSERT members. (tsubst_expr): Handle STATIC_ASSERT statements. * semantics.c (finish_static_assert): New. * lex.c (D_CPP0X): New. (reswords): Add static_assert keyword. (init_reswords): If not flag_cpp0x, mask out C++0x keywords. * parser.c (cp_parser_block_declaration): Parse static assertions. (cp_parser_static_assert): New. (cp_parser_member_declaration): Parse static assertions. 2006-11-21 Jakub Jelinek PR c++/29570 * decl.c (cp_finish_decl): Check for value dependent brace enclosed scalar initializer. PR c++/29734 * cp-tree.h (WANT_VECTOR): Define. (WANT_ARITH): Add WANT_VECTOR. * cvt.c (build_expr_type_conversion): Handle vector types. * typeck.c (build_unary_op): Add WANT_VECTOR to build_expr_type_conversion flags. 2006-11-20 Simon Martin PR c++/29475 * cp-tree.h (enforce_access, perform_or_defer_access_check): Added an extra argument that represents the declaration to use to print potential error messages. * init.c (build_offset_ref): Adjusted the call to perform_or_defer_access_check. * class.c (alter_access, resolve_address_of_overloaded_function): Likewise. * decl.c (make_typename_type, make_unbound_class_template): Likewise. * search.c (lookup_member): Likewise. * friend.c (add_friend): Likewise. * parser.c (cp_parser_template_id, cp_parser_pre_parsed_nested_name_specifier): Likewise. * semantics.c (finish_non_static_data_member, check_accessibility_of_qualified_id, finish_id_expression): Likewise. (pop_to_parent_deferring_access_checks, perform_access_checks, perform_or_defer_access_check): Adjusted the call to enforce_access. * call.c (enforce_access): Use the new extra argument to build the error message. (build_op_delete_call): Adjusted the call to perform_or_defer_access_check. (build_over_call): Likewise. 2006-11-16 Dirk Mueller * name-lookup.c (begin_scope): Use GGC_CNEW instead of GGC_NEW and memset. 2006-11-13 Roger Sayle * rtti.c (get_pseudo_ti_init): Ensure that the offset field of the base type info initializer has the correct type. 2006-11-13 Mark Mitchell PR c++/29518 * pt.c (coerce_template_parms): Do not skip_evaluation while substituting template arguments. 2006-11-11 Richard Guenther * typeck.c (build_unary_op): Remove handling of FIX_CEIL_EXPR, FIX_FLOOR_EXPR and FIX_ROUND_EXPR. 2006-11-03 Roger Sayle * call.c (build_op_delete_call): Test user-visible type against size_type_node, instead of against the internal type, sizetype. * class.c (type_requires_array_cookie): Likewise. * mangle.c (write_builtin_type) : Remove special handling of TYPE_IS_SIZETYPE. * typeck.c (type_after_usual_arithmetic_conversions): Remove special case handling of TYPE_IS_SIZETYPE. (comptypes): Likewise. 2006-11-01 Danny Smith * decl.c (get_atexit_node): Reference atexit, not __cxa_exit. if targetm.cxx.use_atexit_for cxa_atexit. (start_cleanup_fn): Likewise. (register_dtor_fn): Likewise. 2006-09-25 Geoffrey Keating * decl2.c (cp_write_global_declarations): Rename from cp_finish_file. * cp-lang.c (finish_file): Don't call cp_finish_file. * cp-tree.h (cp_write_global_declarations): Rename from cp_finish_file. * cp-objcp-common.h (LANG_HOOKS_WRITE_GLOBALS): Define to cp_write_global_declarations. 2006-10-31 Geoffrey Keating * name-lookup.c (get_anonymous_namespace_name): New. (push_namespace_with_attribs): Use get_anonymous_namespace_name. * decl2.c (start_objects): Update for rename of get_file_function_name_long. 2006-10-30 Dirk Mueller PR c++/28704 * decl.c (grokdeclarator): Duplicate diagnostic message for easier translation. * decl.c (grokdeclarator): Fix line-wrapping. 2006-10-30 Dirk Mueller PR c++/6321 * decl.c (grokfndecl): Use check_main_parameter_types. 2006-10-30 Dirk Mueller PR c++/28669 * decl.c (grokfndecl): Duplicate warning message for easier translation. 2006-10-30 Dirk Mueller * typeck.c (build_unary_op): Fix indenting. Use G_(). 2006-10-29 Dirk Mueller PR c++/29089 * typeck.c (build_unary_op): Duplicate warning message for easier translation. 2006-10-29 Dirk Mueller PR c++/16307 * typeck.c (build_array_ref): Warn for char subscriptions on pointers. 2006-10-29 Kazu Hirata * decl.c: Fix a comment typo. 2006-10-28 Andrew Pinski PR C++/29295 * typeck.c (build_unary_op): Use same_type_p when comparing to boolean type. 2006-10-29 Dirk Mueller PR c++/29033 * typeck.c (build_binary_op): Duplicate warning message for better translation. 2006-10-23 Rafael Ávila de Espíndola * decl.c (builtin_function_1): Move common code to add_builtin_function. (builtin_function): Rename to cxx_builtin_function. Change the signature. * call.c: Include langhooks.h. (build_java_interface_fn_ref): Replace calls to builtin_function with add_builtin_function. * Make-lang.in (cp/call.o): Depend on langhooks.h. * cp-objcp-common.h (LANG_HOOKS_BUILTIN_FUNCTION): Define as cxx_builtin_function. * cp-tree.h (builtin_function): Rename to cxx_builtin_function. Change the signature. 2006-10-22 Nathan Sidwell PR c++/20647 * rtti.c (tinfo_base_init): The type info string is always global. 2006-10-20 Lee Millward Mark Mitchell PR c++/28053 * decl2.c (grokbitfield): Detect invalid non-integral types earlier when possible. 2006-10-18 Mark Shinwell PR c++/26884 * typeck2.c (digest_init): Raise error upon attempts to initialize arrays with variables. 2006-10-17 Lee Millward PR c++/27952 * cp-tree.h (xref_basetypes): Return bool instead of void. * decl.c (xref_basetypes): Adjust definition. Return false if the class bases are invalid. * parser.c (cp_parser_class_head): Check the return value from xref_basetypes. 2006-10-17 Mark Mitchell PR c++/28261 * parser.c (cp_lexer_next_token_is_decl_specifier_keyword): Add comment. PR c++/28261 * parser.c (cp_lexer_next_token_is_decl_specifier_keyword): New function. (cp_parser_constructor_declarator_p): Use it. (cp_parser_check_type_definition): Return a value indicating whether or not the definition is valid. (cp_parser_enum_specifier): Skip invalid enum definitions. 2006-10-17 Mark Mitchell PR c++/29039 * typeck2.c (build_functional_cast): Don't zero-initialize non-PODs; instead, call their constructors. * method.c (synthesize_method): Always build mem-initializers, if we're synthesizing the default constructor. 2006-10-17 Mark Mitchell PR c++/27270 * decl.c (reshape_init_class): Move check for designated to ... * parser.c (cp_parser_initializer_list): ... here. * pt.c (tsubst_copy_and_build): Use finish_compound_literal. 2006-10-16 Mark Mitchell PR c++/27270 * typeck2.c (process_init_constructor_array): Reword comment. * pt.c (tsubst_copy_and_built): Call reshape_init before calling digest_init. PR c++/29408 * parser.c (cp_parser_using_declaration): Stop parsing when something goes wrong with an access declaration. PR c++/29435 * typeck.c (cxx_sizeof_or_alignof_type): Complete non-dependent types when their sizes are required. Refine test for VLAs. PR c++/28211 * parser.c (cp_parser_template_argument): Don't consider "&var" a possible constant-expression. * pt.c (convert_nontype_argument): Refine handling of arguments of pointer type. 2006-10-13 Mark Mitchell PR c++/28506 * parser.c (function_declarator_p): New function. (cp_parser_init_declarator): Use it. (cp_parser_member_declaration): Likewise. 2006-10-12 Mark Mitchell PR c++/29318 * rtti.c (get_tinfo_decl): Refuse to create type info objects for variably modified types. 2006-10-12 Lee Millward PR c++/27961 * decl.c (start_decl): Return error_mark_node if a function is initialized like a variable. (check_var_type): If a variable of field is declared void, set the type to error_mark_node. (grokdeclarator): Check the return type of check_var_type. * class.c (finish_struct_1): Robustify. 2006-10-11 Mark Mitchell PR c++/29175 * decl.c (check_initializer): Issue errors about trying to initialize arrays whose elements have variable size. 2006-10-11 Lee Millward PR c++/29024 * cp-tree (struct cp_decl_specifier_seq): Rename to conflicting_specifiers_p * parser.c (cp_parser_set_storage_class): Set conflicting_specifiers_p for the input decl specifier if a typedef specifier is present. Rename uses of multiple_specifiers_p to conflicting_specifiers_p. (cp_parser_decl_specifier_seq) : If a storage class specifier has already been set for this declaration, set conflicting_specifiers_p to true on the decl_specs. * decl.c (grokdeclarator): Rename uses of multiple_specifiers_p to conflicting_specifiers_p. 2006-10-10 Brooks Moses * Make-lang.in: Added "c++.pdf" target support. 2006-10-10 Richard Guenther PR rtl-optimization/29323 * decl.c (finish_function): Set TREE_NOTHROW only for functions that bind local. 2006-10-09 Richard Henderson Revert emutls patch. 2006-10-04 Richard Henderson Jakub Jelinek * decl.c (grokvardecl): Don't error if !have_tls. (grokdeclarator): Likewise. * parser.c (cp_parser_omp_threadprivate): Likewise. 2006-10-03 Mark Mitchell PR c++/29020 * friend.c (do_friend): Improve comments; add assertion. * parser.c (cp_parser_nested_name_specifier_opt): Resolve typenames for qualified names used in declarations, even when caching qualified name lookup. PR c++/29138 * decl2.c (grokfield): Don't handle access declarations here. * parser.c (cp_parser_using_declaration): Handle access declarations too. (cp_parser_block_declaration): Adjust calls to cp_parser_using_declaration. (cp_parser_member_declaration): Likewise. Use cp_parser_using_declaration to look for access_declarations. 2006-10-03 Volker Reichelt PR c++/29291 * init.c (build_new): Check for invalid init. 2006-10-02 Mark Mitchell PR c++/29226 * typeck.c (cxx_sizeof_or_alignof_type): Tidy. In templates, do not try to actually evaluate sizeof for a VLA type. 2006-10-01 Mark Mitchell PR c++/29105 * pt.c (tsubst_baselink): Substituteinto the qualifying scope. * semantics.c (baselink_for_fns): Build a baselink, even when processing a template. PR c++/29080 * parser.c (cp_parser_postfix_dot_deref_expression): Use BASELINK_ACCESS_BINFO as the qualifying scope when calling adjust_result_of_qualified_name_lookup. 2006-09-25 Lee Millward PR c++/27329 PR c++/26938 * cp-tree.h (redeclare_class_template): Adjust declaration to return bool instead of void. * pt.c (redeclare_class_template): Update definition. Return false on error. * decl.c (xref_tag): Return error_mark_node if redeclare_class_template returned false. PR c++/27667 * cp-tree.h (begin_specialization): Return bool instead of void. * pt.c (check_specialization_scope): Likwise. Adjust comment. Return false if a specialization isn't permitted in the current scope. (begin_specialization): Use the return value of check_specialization_scope. * parser.c (cp_parser_explicit_specialization): If begin_specialization returned false, skip the rest of the specialization. 2006-09-21 Mark Mitchell PR c++/29016 * typeck.c (build_unary_op): Don't form an ADDR_EXPR around a BASELINK. 2006-09-21 Lee Millward PR c++/28861 * decl.c (shadow_tag): Return error_mark_node if maybe_process_partial_specialization failed. PR c++/28303 * decl.c (grokdeclarator): Return error_mark_node on declaration with two or more data types. 2006-09-20 Danny Smith PR target/27650 * class.c (check_for_override): Remove dllimport from virtual methods. 2006-09-18 Steven Bosscher PR c++/29087 * parser.c (cp_parser_labeled_statement): Return nothing. Do not take in_statement_expr and in_compound as arguments. Rename to cp_parser_label_for_labeled_statement. Parse only the label, not the statement. (cp_parser_statement): Parse the statement of a labeled-statement from here, using tail recursion. 2006-09-14 Andrew Pinski PR C++/29002 * init.c (build_zero_init): If we have an error mark node for the array size, return. 2006-09-10 Mark Mitchell PR c++/28991 * cp-objcp-common.c (cxx_staticp): New function. * cp-objcp-common.h (LANG_HOOOKS_STATICP): Use it. * cp-tree.h (cxx_staticp): New function. 2006-09-09 Jason Merrill PR c++/28996 * cvt.c (convert_to_void): Strip COMPONENT_REF to functions. 2006-09-08 Volker Reichelt PR c++/28858 * parser.c (cp_parser_skip_until_found): Rename to cp_parser_skip_to_end_of_template_parameter_list. Remove last two parameters. Track levels of '< ... >'. Stop at '{', '}', or ';'. Reorganize. Adjust comment. (cp_parser_template_declaration_after_export): Adjust call. (cp_parser_enclosed_template_argument_list): Likewise. 2006-09-07 Andrew Pinski PR C++/28906 * init.c (build_new_1): Build a distinct type copy for the array type that was returned from build_cplus_array_type. 2006-09-07 Jason Merrill PR c++/27371 * cvt.c (convert_to_void): Enable previous change. PR c++/26957 * method.c (use_thunk): Clear DECL_HAS_VALUE_EXPR_P on copied parms. 2006-09-07 Simon Martin PR c++/28284 * pt.c (fold_non_dependent_expr): Make sure expr is not dereferenced if it is NULL. 2006-09-06 Zak Kipling PR c++/26195 * decl.c (make_rtl_for_nonlocal_decl), (start_preparsed_function): Don't use lbasename on input_filename when calling get_fileinfo. * semantics.c (begin_class_definition): Likewise. * lex.c (cxx_make_type): Likewise. (handle_pragma_interface): Call get_fileinfo on input_filename, not on the parameter to the directive. 2006-09-06 Mark Mitchell PR c++/28903 * pt.c (tsubst): Use fold_non_dependent_expr to fold array dimensions. PR c++/28886 * pt.c (unify): Avoid unnecessary calls to fold_build2 for array dimensions. 2006-09-06 Jason Merrill PR c++/27371 * cvt.c (convert_to_void): Strip useless TARGET_EXPR. * cp-tree.h (TARGET_EXPR_IMPLICIT_P): New macro. * tree.c (build_cplus_new): Set it. PR c++/26696 * cvt.c (convert_to_void): Replace a subexpression with no side effects with void_zero_node. * tree.c (is_overloaded_fn): Look through COMPONENT_REF. (get_first_fn): Ditto. * decl.c (grokdeclarator): No need to look through COMPONENT_REF. 2006-09-05 Jason Merrill PR c++/26571 * parser.c (cp_parser_diagnose_invalid_type_name): Handle the case where the name is a type used incorrectly. PR c++/26671 * typeck.c (maybe_warn_about_returning_address_of_local): Look through COMPONENT_REF and ARRAY_REF. PR c++/26102 * name-lookup.c (do_class_using_decl): Try to find the base even if bases_dependent_p. * pt.c (type_dependent_expression_p): A USING_DECL is dependent. PR c++/19809 * pt.c (tsubst_friend_function): Set DECL_INITIAL before pushdecl. 2006-09-04 Nathan Sidwell PR 23287 Revert my 2006-09-01 patch. * parser.c: Reverted. * pt.c: Reverted. 2006-09-02 Lee Millward PR c++/27670 PR c++/27493 PR c++/27494 PR c++/27397 * parser.c (cp_parser_template_parameter_list): Add invalid template parameters to the parameter list as error_mark_node. 2006-09-02 Jakub Jelinek PR c++/28878 * except.c (build_throw): Only set current_function_returns_abnormally if cfun is not NULL. PR c++/26917 * repo.c (repo_file): Remove. (open_repo_file, reopen_repo_file_for_write): Return fopened FILE * instead of setting global repo_file variable. (init_repo): Adjust caller. (finish_repo): Likewise. Return instead of goto out before reopen_repo_file_for_write has been called. 2006-09-01 Nathan Sidwell PR c++/28705 * semantics.c (finish_call_expr): Add assert. * name-lookup.c (lookup_arg_dependent): Check we found an overload or an object. PR c++/23287 * parser.c (cp_parser_id_expression): Add member_p argument. Update all callers. (cp_parser_unqualified_id): Likewise. Lookup a destructor name in the object's scope, if valid. (cp_parser_global_scope_opt): Add object_scope_valid_p. Update callers. (cp_parser_postfix_dot_deref_expression): Set object_scope. * pt.c (tsubst_copy_and_build): Lookup dependent dtor name here. 2006-08-30 Jason Merrill PR c++/26670 * class.c (check_field_decls): Don't unset TYPE_PACKED until all the fields have been processed. 2006-08-29 Andrew Pinski PR C++/28349 * call.c (build_x_va_arg): Remove the reference type from the type before creating the pointer type. 2006-08-29 J"orn Rennecke PR c++/28139 * except.c (expand_start_catch_block): Use correct types for bitwise copy. 2006-08-28 Jason Merrill PR c++/26670 * class.c (check_field_decls): Unset TYPE_PACKED (t) if one of the fields can't be packed. PR c++/26577 * cvt.c (convert_to_void): Don't automatically load from volatiles of TREE_ADDRESSABLE type. 2006-08-28 Volker Reichelt PR c++/28860 * cp-tree.h (maybe_process_partial_specialization): Return tree instead of void. * parser.c (cp_parser_class_head): Use return value of maybe_process_partial_specialization. * pt.c (maybe_process_partial_specialization): Return error_mark_node for broken specializations, TYPE otherwise. Check for template template parameters. 2006-08-27 Mark Mitchell PR c++/28058 * pt.c (register_specialization): Return error_mark_node for specialization-after-instantiation. * decl2.c (mark_used): Mark the main function used when one of its clones is used. 2006-08-27 Lee Millward PR c++/26573 * class.c (check_field_decls): Don't issue error about local classes containing static data members. 2006-08-26 Joseph S. Myers PR c++/24009 * parser.c (struct cp_token): Add input_file_stack_index. (eof_token): Update. (cp_lexer_get_preprocessor_token): Save input_file_stack_tick. (cp_lexer_set_source_position_from_token): Restore input file stack. 2006-08-26 Lee Millward PR c++/28736 PR c++/28737 PR c++/28738 * pt.c (process_template_parm): Store invalid template parameters as a TREE_LIST with a TREE_VALUE of error_mark_node. (push_inline_template_parms_recursive): Check for template parameters having a TREE_VALUE of error_mark_node rather than check the parameter itself. (mangle_class_name_for_template): Likewise. (comp_template_parms): When comparing the individual template parameters, return 1 if either is error_mark_node. (current_template_args): Robustify. (redeclare_class_template): Likewise. 2006-08-26 Mark Mitchell PR c++/28588 * class.c (resolve_address_of_overloaded_function): Add access_path parameter. Perform access checks. (instantiate_type): Adjust call to resolve_address_of_overloaded_function. Remove unnecessary code. * tree.c (is_overloaded_fn): Document. Return 2 when there are acutally multiple functions. (really_overloaded_fn): Use is_overloaded_fn. * mangle.c (write_expression): Handle BASELINKs. * cp-tree.h (really_overloaded_fn): Return bool. (baselink_for_fns): Declare. * search.c (lookup_member): Check access for single static functions here. * pt.c (convert_nontype_argument_function): Handle BASELINKs. (tsubst_copy_and_build): Generate BASELINKs for template-ids. * semantics.c (finish_call_expr): Use baselink_for_fns. (baselink_for_fns): New function. (finish_id_expression): Use it. * parser.c (cp_parser_template_argument): Don't strip BASELINKs. PR c++/28595 * pt.c (tsubst): Issue errors about attempts to create VLAs at template-instantiation time. 2006-08-25 Volker Reichelt PR c++/28853 * typeck2.c (cxx_incomplete_type_diagnostic): Handle template template parameters. Improve error message for template type parameters. PR c++/28852 * cp-tree.h (grok_op_properties): Return bool instead of void. * decl.c (grokfndecl): Discard invalid operator declarations. (copy_fn_p): Revert change for PR 27547. (grok_op_properties): Return error status (true on success). * pt.c (tsubst_decl): Discard invalid operator declarations. 2006-08-25 Mark Mitchell PR c++/28056 * decl.c (grokdeclarator): Disallow declarations with qualified names in local scopes. 2006-08-25 Nathan Sidwell PR c++/27787 * decl.c (make_typename_type): Only try and resolve it when context is not dependent. Refactor. * decl2.c (check_classfn): Push to class scope before looking for the function. 2006-08-24 Danny Smith PR driver/28528 * g++spec.c (lang_specific_driver): Always check if we need to swallow a space-separated arg to '-x'. * lang-specs.h: Don't create ouput files for '-xc++-header' if -fsyntax-only. 2006-08-23 Jason Merrill PR c++/27714 * pt.c (push_template_decl_real): A friend template with class scope isn't primary. 2006-08-23 Benjamin Smedberg PR c++/28687 * rtti.c (build_dynamic_cast, build_dynamic_cast_1): Move -fno-rtti check to be more specific. 2006-08-22 Jason Merrill PR c++/23372 * call.c (build_over_call): Don't make a copy here if build_call will make one too. 2006-08-22 Andrew Pinski PR C++/28450 * cp/init.c (build_zero_init): Handle VECTOR_TYPE and COMPLEX_TYPEs. 2006-08-22 Simon Martin PR c++/28420 * parser.c (cp_parser_postfix_expression): Make sure that the saved value for parser->type_definition_forbidden_message is restored before returning to avoid an invalid free(). 2006-08-22 Jason Merrill PR c++/28659 * typeck.c (merge_types): If either of the types have the right attributes, return that one. * tree.c (cp_build_type_attribute_variant): Make sure we aren't doing this to class types. * typeck.c (original_type): Deal with type quals properly. 2006-08-21 Jason Merrill PR c++/27115 * semantics.c (finish_stmt_expr_expr): Don't try to voidify here, just leave the expression as it is. (finish_stmt_expr): If the statement-expression has class type, wrap it in a TARGET_EXPR. * cp-gimplify.c (cp_gimplify_init_expr): Don't bother with CLEANUP_POINT_EXPR. * except.c (build_throw): Give the CLEANUP_POINT_EXPR void type. 2006-08-21 Lee Millward PR c++/26269 * decl.c (duplicate_decls): Return early if either newdecl or olddecl is error_mark_node. PR c++/28505 * decl.c (grokdeclarator): Return early after issuing diagnostic about an incomplete type. PR c++/28741 * tree.c (decl_anon_ns_mem_p): Robustify. * decl2.c (determine_visibility): Likewise. 2006-08-20 Mark Mitchell PR c++/28341 * tree.c (cast_valid_in_integral_constant_expression_p): New function. * cp-tree.h (tsubst_copy_and_build): Adjust prototype. * pt.c (tsubst_expr): Add integral_constant_expression_p parameter. (fold_non_dependent_expr): Adjust callers of tsubst_{expr,copy_and_build}. (tsubst_friend_function): Likewise. (tsubst_template_arg): Likewise. (tsubst_default_argument): Likewise. (tsubst_decl): Likewise. (tsubst): Likewise. (tsubst_omp_clasuses): Likewise. (regenerate_decl_fromp_template): Likewise. (instantiate_decl): Likewise. (tsubst_initializer_list): Likewise. (tsubst_enum): Likewise. (tsubst_expr): Use RECUR throughout. (tsubst_copy_and_build): Change definition of RECUR. Do not allow invalid casts in integral constant expressions. * parser.c (cp_parser_postfix_expression): Use cast_valid_in_integral_constant_expression_p. (cp_parser_cast_expression): Likewise. (cp_parser_functional_cast): Likewise. PR c++/28346 * pt.c (tsubst_qualified_id): Do not strip references from OFFSET_REFs. 2006-08-17 Volker Reichelt PR c++/28606 * parser.c (cp_parser_diagnose_invalid_type_name): Handle BIT_NOT_EXPR. Fix formatting. (cp_parser_parse_and_diagnose_invalid_type_name): Tighten condition for valid type-names. (cp_parser_unqualified_id): Fix error handling for destructors. PR c++/28710 * decl.c (xref_tag): Improve error message. Return early on error. PR c++/28711 * pt.c (tsubst_copy_and_build) : Robustify. 2006-08-17 Paolo Bonzini PR c++/28573 * semantics.c (finish_offsetof): Add new argument to fold_offsetof. 2006-08-16 Andrew Pinski PR c++/28302 * typeck.c (build_unary_op ): Don't call perform_integral_promotions for non integral type. 2006-08-16 Jason Merrill PR c++/28385 * pt.c (tsubst) [TEMPLATE_TYPE_PARM]: Ignore quals from template if arg is a function. 2006-08-16 Volker Reichelt PR c++/28593 * init.c (build_new): Return early on invalid placement. 2006-08-15 Lee Millward PR c++/28594 * pt.c (process_template_parm): Robustify. 2006-08-14 Steve Ellcey PR c++/28288 PR c++/14556 * operators.def: Remove , ?= operators. * parser.c: Remove CPP_MIN, CPP_MAX, CPP_MIN_EQ, and CPP_MAX_EQ. (cp_parser_warn_min_max): Remove. 2006-08-11 Jason Merrill PR c++/28559 * parser.c (cp_parser_elaborated_type_specifier): Also ignore attributes applied to a TYPENAME_TYPE. 2006-08-09 Lee Millward PR c++/28637 * pt.c (coerce_template_parms): Copy across the invalid template arguments to the new template inner arguments. (retrieve_specialization): Robustify. PR c++/28638 * pt.c (coerce_template_template_parms): Robustify. PR c++/28639 * error.c (dump_template_parms): Robustify. PR c++/28640 * pt.c (redeclare_class_template): Robustify. PR c++/28641 * pt.c (type_unification_real): Robustify. 2006-08-03 Lee Millward PR c++/28347 * decl.c (start_decl): Return error_mark_node if a diagnostic was issed for an invalid typedef initialization. 2006-08-03 Volker Reichelt PR c++/27508 * parser.c (cp_parser_unqualified_id): Check for invalid scopes when parsing destructor names. PR c++/28274 * decl.c (duplicate_decls): Call check_default_args here. (start_preparsed_function): Do not call check_default_args. * name-lookup.c (pushdecl_maybe_friend): Only call check_default_args if duplicate_decls got bypassed. 2006-08-02 Richard Guenther PR c++/28479 Revert 2006-07-05 Richard Guenther Andrew Pinski PR c++/27084 * cp-objcp-common.c (cxx_types_compatible_p): Ignore top level qualifiers for pointer type comparisons. 2006-08-02 Mark Mitchell PR c++/28557 * pt.c (tsubst_baselink): Substitute into BASELINK_OPTYPE. 2006-07-31 Mark Mitchell PR c++/28523 * tree.c (stabilize_expr): Tweak documentation. Add assertion. (stabilize_call): Tweak documentation. (stabilize_init): Only call stabilize_call for calls. 2006-08-01 Steve Ellcey PR c++/28432 * decl2.c (check_classfn): Remove early return. * search.c (lookup_member): Return NULL with bad type. 2006-08-01 Steve Ellcey PR c++/28256 * decl.c (check_initializer): Check for 1 initializer on scalar types. 2006-08-01 Daniel Jacobowitz PR debug/23336 * pt.c (tsubst_copy_and_build): Mark used enum types. * semantics.c (finish_id_expression): Likewise. 2006-07-31 Volker Reichelt PR c++/6634 * decl.c (grokdeclarator): Check whether "long" or "short" was specified for non-integral types. 2006-07-28 Volker Reichelt * Make-lang.in: Use $(HEADER_H) instead of header.h in dependencies. 2006-07-28 Lee Millward PR c++/27668 PR c++/27962 * pt.c (process_template_parm) Store invalid template parameters as error_mark_node in the paramater list. (push_inline_template_parms_recursive): Handle invalid template parameters. (comp_template_parms): Likewise. (check_default_tmpl_arg): Likewise. (coerce_template_template_parms): Likewise. (mangle_class_name_for_template): Likewise. (tsubst_template_parms): Likewise. * error.c (dump_template_argument_list): Likewise. 2006-07-28 Kazu Hirata * cp-tree.h: Fix a comment typo. 2006-07-24 Volker Reichelt PR c++/27572 * decl.c (grokdeclarator): Return error_mark_node after invalid typedef. 2006-07-23 Daniel Jacobowitz PR c++/28460 * decl.c (grokvardecl): Use FROB_CONTEXT. * pt.c (register_specialization): Likewise. 2006-07-23 Mark Mitchell PR c++/28025 * cp-tree.h (LOOKUP_HIDDEN): New macro. Reformat comments. * name-lookup.c (unqualified_namespace_lookup): There is no way to have a hidden name in non-namespace scopes. * pt.c (tsubst_friend_class): Look for hidden names. * decl.c (lookup_and_check_tag): Fix typo in comment. * semantics.c (finish_compound_literal): Fix typo in comment. 2006-07-21 Jason Merrill * decl2.c (determine_visibility): Don't propagate visibility from type to decl. (constrain_class_visibility): Don't warn in system headers. Don't warn about pointer fields. 2006-07-20 Mike Stump * decl2.c (determine_visibility_from_class): Don't use hidden visibility for explicit instantiations. 2006-07-21 Volker Reichelt PR c++/28250 * pt.c (tsubst_expr): Only apply DECL_TEMPLATE_INSTANTIATED to valid decls. Cleanup. PR c++/28363 * semantics.c (check_template_template_default_arg): Simplify error handling. 2006-07-20 Jason Merrill PR c++/28407 * decl.c (grokvardecl): Set DECL_THIS_STATIC on file-scope const variables with implicit internal linkage. * tree.c (decl_linkage): Only return lk_external if it's set. PR c++/28409 * decl2.c (constrain_visibility): Ignore the anonymous namespace for extern "C" decls. (VISIBILITY_STATIC): Rename to VISIBILITY_ANON. * decl2.c (constrain_visibility): Remove specified and reason parameters. Don't touch decls that already have explicit visibility. (determine_visibility): Do copy DECL_VISIBILITY_SPECIFIED from template. (determine_visibility_from_class): Reverse sense of DECL_VISIBILITY_SPECIFIED test for target-specific visibility rules. (constrain_class_visibility): Only complain about member visibility if the member type is another class. Don't change visibility of the current class. 2006-07-19 Mark Mitchell PR c++/28338 * decl.c (layout_var_decl): Don't call push_local_name here. (initialize_artificial_var): Assert artificiality. (cp_finish_decl): Call push_local_name here. 2006-07-18 Mark Mitchell PR c++/28337 * typeck.c (build_binary_op): Short-circuit pointer arithmetic in templates. 2006-07-18 Mark Mitchell PR c++/28048 * semantics.c (check_accessibility_of_qualified_id): Robustify. PR c++/28235 * pt.c (tsubst_decl): Handling substitutions into a static data member from within the scope of the tempalte itself. 2006-07-18 Lee Millward PR c++/28258 * method.c (locate_copy): Check for non_reference returning error_mark_node. PR c++/28260 * decl.c (duplicate_decls): Return error_mark_node on ambiguous declaration. 2006-07-18 Steve Ellcey PR c++/27495 * search.c (adjust_result_of_qualified_name_lookup): Change assert to part of if statement. 2006-07-17 Steve Ellcey PR c++/28291 * decl.c (reshape_init_class): Return error_mark_node on error. 2006-07-17 Steve Ellcey PR c++/28304 * decl2.c (check_classfn): Return NULL_TREE on error. 2006-07-17 Volker Reichelt PR c++/28250 * name-lookup.c (pushdecl_maybe_friend): Return early on error_mark_node. * except.c (expand_start_catch_block): Use error_mark_node instead of NULL_TREE for invalid decls. * parser.c (cp_parser_exception_declaration): Return error_mark_node on invalid catch parameter. Simplify. 2006-07-16 Jakub Jelinek PR c++/28370 * decl2.c (note_vague_linkage_var): Removed. (finish_static_data_member_decl): Add decl to pending_statics vector directly. Do it even for non-public decls. 2006-07-15 Lee Millward PR c++/28292 * decl2.c (acceptable_java_type): Robustify. Use proper Boolean return type instead of return 1. (check_java_method): Don't issue error about type not being an acceptable Java parameter if it's error_mark_node. PR c++/28269 * parser.c (cp_parser_elaborated_type_specifier): Return early if an invalid type was detected. 2006-07-15 Volker Reichelt PR c++/28249 * parser.c (cp_parser_check_decl_spec): New function. (cp_parser_decl_specifier_seq): Factor out check for repeated decl-specifiers into cp_parser_check_decl_spec. Use it. (cp_parser_type_specifier_seq): Use it. PR c++/28294 * semantics.c (finish_offsetof): Use TREE_OPERAND for COMPONENT_REFs only. PR c++/28387 * decl2.c (cplus_decl_attributes): Check for invalid decls. 2006-07-14 Volker Reichelt PR c++/28343 * decl.c (cp_finish_decl): Check asmspec_tree for error_mark_node. * decl2.c (grokfield): Likewise. 2006-07-12 Geoffrey Keating * decl2.c (determine_visibility): Don't change visibility of function locals because of -fvisibility-inlines-hidden. 2006-07-12 Jason Merrill PR c++/28217 * semantics.c (note_decl_for_pch): Don't premangle templates. 2006-07-12 Martin Michlmayr * typeck.c (string_conv_p): Remove spurious quotation mark in warning. 2006-07-07 Lee Millward Andrew Pinski PR c++/27820 * decl.c (define_label): Return error_mark_node on error. * semantics.c (finish_label_stmt): Don't call add_stmt for invalid labels. 2006-07-06 Jason Merrill PR c++/28279 * decl2.c (finish_static_data_member_decl): Don't assert TREE_PUBLIC. 2006-07-05 Jason Merrill PR c++/13983 PR c++/17519 * class.c (check_field_decls): Check TYPE_PACKED after stripping array types. (finish_struct_bits): Don't copy TYPE_SIZE here. PR c++/18681 * friend.c (is_friend): Fix DR 45 implementation. 2006-07-05 Richard Guenther Andrew Pinski PR c++/27084 * cp-objcp-common.c (cxx_types_compatible_p): Ignore top level qualifiers for pointer type comparisons. 2006-07-01 Jason Merrill PR c++/28215 * method.c (make_thunk): Unset DECL_USE_TEMPLATE and DECL_TEMPLATE_INFO. 2006-06-30 Jason Merrill PR c++/26577 * call.c (build_new_method_call): Force evaluation of the instance pointer, not the object. 2006-06-30 Kazu Hirata * decl2.c: Fix a comment typo. 2006-06-30 Jason Merrill PR c++/18698 * decl2.c (grokfield): Only try to treat the decl as an access declaration if the scope is a class. 2006-06-29 Jason Merrill PR c++/26905 PR c++/26612 PR c++/27000 PR c++/26984 PR c++/19134 * decl2.c (determine_visibility): Overhaul. (determine_visibility_from_class): Likewise. (min_vis_r, type_visibility, constrain_visibility): New fns. (constrain_visibility_for_template): Likewise. (constrain_class_visibility): Likewise. * decl.c (cp_finish_decl): Call determine_visibility for function decls, too. * name-lookup.c (pushtag): Call determine_visibility. * decl.c (duplicate_decls): Don't copy visibility from template to specialization. * pt.c (check_explicit_specialization): Likewise. (lookup_template_class, tsubst_decl): Call determine_visibility. * class.c (finish_struct_1): Call constrain_class_visibility. PR c++/26905 PR c++/21675 PR c++/17470 * parser.c (cp_parser_explicit_instantiation): Pass the attributes to grokdeclarator. (cp_parser_type_specifier): Allow 'enum __attribute ((...)) E'. (cp_parser_enum_specifier): Likewise. (cp_parser_elaborated_type_specifier): Apply attributes if this declares only the class. (cp_parser_class_specifier): Apply leading attributes immediately. * semantics.c (begin_class_definition): Add attributes parameter, apply them to the type. PR c++/21581 PR c++/25915 * tree.c (decl_anon_ns_mem_p): New function. * cp-tree.h: Declare it. * decl2.c (determine_visibility): Make anonymous namespace members static. (min_vis_r, constrain_visibility): Likewise. * rtti.c (create_pseudo_type_info): Set TREE_PUBLIC on pseudo-types. * decl.c (cxx_init_decl_processing): Set TREE_PUBLIC on global_namespace. * name-lookup.c (push_namespace_with_attribs): Don't set TREE_PUBLIC on anonymous namespaces. 2006-06-28 Jason Merrill PR c++/27424 * pt.c (convert_template_argument): Pass all template arguments on to coerce_template_template_parms. 2006-06-25 Lee Millward Mark Mitchell PR c++/28054 * decl2.c (grokbitfied): Remove check for grokdeclarator returning NULL_TREE, instead check for error_mark_node to indicate failure. * decl.c (grokdeclarator): Adjust block comment. 2006-06-25 Lee Millward PR c++/28051 * mangle.c (mangle_conv_op_name_for_type): Check for invalid types. * name-lookup.c (push_class_level_binding): Robustify. (do_class_using_decl): Return early if name is error_mark_node. 2006-06-23 Steve Ellcey PR c++/28114 * name-lookup.c (pushtag): Return if we have error_mark_node. 2006-06-23 Steve Ellcey PR c++/27019 * typeck2.c (process_init_constructor_array): Set ce->value on errors. 2006-06-23 Volker Reichelt PR c++/28112 * parser.c (cp_parser_attribute_list): Skip attributes with invalid arguments. Fix comment. PR c++/11468 * init.c (build_new_1): Handle error_mark_nodes returned by build_java_class_ref. (build_java_class_ref): Do not abort compilation, but return error_mark_node. Improve error message. Fix indentation. 2006-06-23 Danny Smith PR target/27789 * decl.c (start_decl): Check that dllimports are not initialized. 2006-06-22 Lee Millward PR c++/27805 * typeck2.c (build_m_component_ref): Use error_operand_p. PR c++/27821 * decl.c (grokdeclarator): Return error_mark_node on invalid uses of the scope resolution operator. 2006-06-22 Volker Reichelt PR c++/28111 * pt.c (determine_specialization): Check for invalid decls. PR c++/28110 * pt.c (unify) : Check for invalid parameters. PR c++/28109 * rtti.c (get_tinfo_decl_dynamic): Robustify. 2006-06-20 Volker Reichelt PR c++/28052 * init.c (push_base_cleanups): Skip members with invalid types. * typeck.c (build_class_member_access_expr): Robustify. 2006-06-19 Mark Mitchell * pt.c (instantiate_template): Fix typo in comment. 2006-06-19 Richard Guenther * parser.c (CP_LEXER_BUFFER_SIZE): Adjust to assure near power-of-two token vector size. 2006-06-16 Mark Mitchell PR c++/28016 * decl.c (cp_finsh_decl): Do not emit uninstantiated static data members. PR c++/27979 * call.c (standard_conversion): Strip cv-qualifiers from bitfield types. PR c++/27884 * decl.c (have_extern_spec): Remove. (start_decl): Do not check have_extern_spec. (start_function): Likewise. * cp-tree.h (have_extern_spec): Remove. * parser.c (cp_parser_linkage_specification): Don't set have_extern_spec. (cp_parser_init_declarator): Likewise. (cp_parser_parameter_declaration): Do not treat parameters as within the scope of an unbraced linkage specification. 2006-06-15 Mark Mitchell PR c++/27689 * cp-tree.h (CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P): New macro. * pt.c (unify): Use it. PR c++/27666 * call.c (build_conditional_expr): Robustify. PR c++/27640 * pt.c (instantiate_template): Set processing_template_decl to zero while performing substitutions. 2006-06-14 Mark Mitchell PR c++/27665 * parser.c (cp_parser_unqualified_id): Use constructor_name_p to identify destructors. (cp_parser_nested_name_specifier_opt): Remove invalid optimization. (cp_parser_template_id): Refine heuristic for determining whether we are entering a scope. PR c++/27648 * parser.c (cp_parser_declarator): Robustify. PR c++/26559 * pt.c (tsubst_expr): Use finish_omp_atomic. (value_dependent_expression_p): All CALL_EXPRs are dependent. * semantics.c (finish_omp_atomic): Rework to use standard paradigms for handling non-dependent expressions. 2006-06-14 Gabriel Dos Reis * typeck.c (build_modify_expr): Tidy diagnostic message. 2006-06-14 Mark Mitchell PR c++/28018 * typeck.c (build_modify_expr): Disallow array assignment. 2006-06-14 Gabriel Dos Reis * cp-tree.def: Fix typo. 2006-06-13 Mark Mitchell PR c++/27227 * decl.c (decls_match): Allow an extern "C" variable declarations from different namespaces to match. (duplicate_decls): Disallow redeclaring a variable with a different linkage specification. 2006-06-13 Jakub Jelinek PR middle-end/27793 * cp-tree.h (cxx_int_tree_map): New struct. (struct language_function): Add extern_decl_map field. * name-lookup.c (pushdecl_maybe_friend): Add x -> t mapping to cp_function_chain->extern_decl_map hash table instead of copying over DECL_UID. * cp-gimplify.c (cxx_int_tree_map_eq, cxx_int_tree_map_hash): New functions. (cp_genericize_r): Remap DECL_EXTERN local decls using cp_function_chain->extern_decl_map hash table. * decl.c (finish_function): Clear extern_decl_map. 2006-06-12 Volker Reichelt PR c++/27601 * semantics.c (finish_offsetof): Handle pseudo-destructors. PR c++/27933 * name-lookup.c (lookup_qualified_name): Always return error_mark_node if lookup fails. PR c++/27951 * decl2.c (finish_anon_union): Return early if build_anon_union_vars fails. 2006-06-12 Roger Sayle PR c++/21210 * typeck2.c (build_functional_cast): Use cp_convert to construct non-aggregate initializers instead of the user-level build_c_cast. 2006-06-07 Volker Reichelt PR c++/27601 * cp-tree.h (finish_offsetof): Add prototype. * semantics.c (finish_offsetof): New function. * parser.c (cp_parser_builtin_offsetof): Call it instead of fold_offsetof. * pt.c (tsubst_copy_and_build): Likewise. 2006-06-06 Mark Mitchell PR c++/27177 * call.c (standard_conversion): Require that the derived type be complete when performing a derived-to-base conversion. 2006-06-04 Mark Mitchell PR c++/27819 * decl.c (cp_finish_decl): Process initializers for static data members with non-dependent initializers, even in templates. PR c++/27722 * decl.c (maybe_deduce_size_from_array_init): If the declaration is erroneous, give it an erroneous type. (layout_var_decl): If the type is erroneous, give up. (check_initializer): Likewise. PR c++/27807 * cp-tree.h (TYPE_OBJ_P): New macro. (TYPE_PTROB_P): Use it. (TYPE_REF_OBJ_P): Likewise. * semantics.c (finish_compound_literal): Do not permit compound literals of non-object types. PR c++/27806 * typeck.c (original_type): Robustify. 2006-06-05 Volker Reichelt PR c++/27804 * init.c (constant_value_1): Return decl instead of error_mark_node for invalid initializers. 2006-06-01 Andrew Pinski PR c++/27592 * rtti.c (build_dynamic_cast_1): Call c_common_truthvalue_conversion on operand of the COND_EXPR for the null pointer check. 2006-06-01 Andrew Pinski PR c++/26740 * typeck.c (build_unary_op): Mark the function as being used. 2006-06-01 Alexandre Oliva PR c++/26660 * parser.c (cp_parser_initial_pragma): Read one more token for caller after reading PCH file in. 2006-05-31 Mark Mitchell PR c++/27801 * call.c (perform_implicit_conversion): Do not actually perform conversions in templates. PR c++/26496 * call.c (resolve_args): Check for invalid uses of bound non-static member functions. * init.c (build_offset_ref): Return error_mark_node for errors. PR c++/27385 * decl.c (reshape_init): Robustify. (reshape_init_array_1): Likewise. 2006-05-30 Mark Mitchell PR c++/27808 * parser.c (cp_parser_decl_specifier_seq): Issue errors about "friend" specifiers that do not appear in class scopes. PR c++/27803 * class.c (check_bitfield_decl): Ensure that all bitfields have integral type. 2006-05-29 Kazu Hirata * pt.c (convert_nontype_argument): Fix a typo in an error message. 2006-05-28 Kazu Hirata * decl.c, decl2.c, parser.c: Fix comment typos. Follow spelling conventions. 2006-05-24 Mark Mitchell PR c++/20103 * decl.c (cp_make_fname_decl): Don't set DECL_INITIAL to error_mark_node to indicate an initialization is OK. (start_decl): Likewise. Adjust call to start_decl_1. (start_decl_1): Add initialized parameter. Simplify. * except.c (initialize_handler_parm): Adjust call to setart_decl_1. (expand_start_catch_block): Let cp_finish_decl initialize catch parameters. * cp-tree.h (start_decl_1): Adjust prototype. * pt.c (tsubst_expr): Don't set DECL_INITIAL to error_mark_node. (instantiate_decl): Let cp_finish_decl handle initialization. * semantics.c (finish_compound_literal): Create a temporary variable for the literal. * typeck.c (build_unary_op): Remove COMPOUND_LITERAL_P special cases. * decl2.c (finish_static_data_member_decl): Don't set DECL_INITIAL. (grokfield): Do not try to initialize functions. 2006-05-23 Mark Mitchell PR c++/20173 * pt.c (determine_specialization): Disallow partial specializations of templates. 2006-05-22 Volker Reichelt PR c++/27716 * typeck.c (build_modify_expr): Test arguments for error_operand_p. * decl.c (grokdeclarator): Return error_mark_node instead of NULL_TREE. 2006-05-21 Mark Mitchell PR c++/27210 * cp-tree.h (cp_save_expr): New function. * init.c (build_new): Correct logic for zero-element array warning. Use cp_save_expr. * tree.c (cp_save_expr): New function. 2006-05-21 Volker Reichelt PR c++/27398 * decl.c (grokdeclarator): Return error_mark_node instead of NULL_TREE or void_type_node. 2006-05-19 Mike Stump * typeck.c (default_conversion): Remove static. 2006-05-19 Mark Mitchell PR c++/26433 * cp-tree.h (begin_function_try_block): Change prototype. (finish_function_handler_sequence): Likewise. * parser.c (cp_parser_function_try_block): Adjust calls. * pt.c (tsubst_expr): Adjust calls. * semantics.c (begin_function_try_block): Create an artificial outer scope. (finish_function_handler_sequence): Close it. 2006-05-18 Mark Mitchell PR c++/27471 PR c++/27506 * typeck.c (decay_conversion): Convert bitfields to their declared types here. Improve documentation. Avoid use of cp_convert. (default_conversion): Make it static. Perform integral promotions before lvalue-to-rvalue, function-to-pointer, and array-to-pointer conversions. * init.c (build_init): Remove. (expand_default_init): Do not call rvalue. * call.c (null_ptr_cst_p): Robustify. (build_conditional_expr): Tidy. * except.c (build_throw): Do not perform lvalue-to-rvalue conversion on operand before initializing temporary. * tree.c (convert.h): Include it. (convert_bitfield_to_declared_type): Use convert_to_integer, not cp_convert. (rvalue): Don't convert bitfields to their declared type here. * cp-tree.h (build_init): Remove. (default_conversion): Likewise. * typeck2.c (build_m_component_ref): Do not perform lvalue-to-rvalue, function-to-pointer, or array-to-pointer conversions here. Correct error message. 2006-05-17 Mark Mitchell PR c++/26122 * decl2.c (check_member_template): Remove checks for virtual functions. * parser.c (cp_parser_function_specifier_opt): Complain about virtual templates. (cp_parser_pure_specifier): Likewise. PR c++/26068 * parser.c (cp_parser_set_storage_class): Check for invalid uses of storage classes on unbraced linkage specifications. (cp_parser_decl_specifier_seq): Pass keywords, not storage classes, to cp_parser_set_storage_class. 2006-05-17 Jakub Jelinek PR c++/27491 * semantics.c (finish_compound_literal): Only set TREE_HAS_CONSTRUCTOR on CONSTRUCTORs. PR middle-end/27415 * parser.c (cp_parser_omp_parallel): Set OMP_PARALLEL_COMBINED on combined parallel workshare constructs. * pt.c (tsubst_expr): Copy OMP_PARALLEL_COMBINED flag. 2006-05-16 H.J. Lu PR driver/26885 * Make-lang.in (GXX_OBJS): Replace gcc.o with $(GCC_OBJS). 2006-05-15 Mark Mitchell PR c++/27339 * cp-tree.h (perform_access_checks): New function. * semantics.c (perform_access_checks): New function. (perform_deferred_access_checks): Use it. * parser.c (cp_parser_simple_declaration): Adjust call to cp_parser_init_declarator. (cp_parser_type_parameter): Do not defer checks in default arguments. (cp_parser_explicit_specialization): Adjust call to cp_parser_single_declaration. (cp_parser_init_declarator): Perform template-parameter access checks. (cp_parser_parameter_declaration): Do not defer checks for template parameter default arguments. (cp_parser_template_declaration_after_export): Gather access checks for template parameters, and pass them to cp_parser_single_declaration. (cp_parser_template_parameter_access_checks): New function. (cp_parser_single_declaration): Add checks parameter. PR c++/27505 * call.c (convert_like_real): Convert bitfields to their declared types when forming an rvalue. * tree.c (convert_bitfield_to_declared_type): New function. (rvalue): Use it. * cp-tree.h (convert_bitfield_to_declare_type): Declare it. 2006-05-15 Volker Reichelt PR c++/27582 * pt.c (any_dependent_template_arguments_p): Return early on invalid argument list. PR c++/27581 * search.c (adjust_result_of_qualified_name_lookup): Skip on invalid context_class. PR c++/27315 * pt.c (do_decl_instantiation): Return early on invalid decl. PR c++/27559 * pt.c (push_template_decl_real): Return error_mark_node instead of broken decl. PR c++/27496 * pt.c (tsubst_friend_class): Return early on invalid friend declarations. 2006-05-14 H.J. Lu * Make-lang.in (cp/decl.o): Add dependency on $(TARGET_H). (cp/decl2.o): Likewise. (cp/typeck.o): Likewise. (cp/cvt.o): Likewise. (cp/parser.o): Likewise. (cp/call.o): Replace target.h with $(TARGET_H). 2006-05-14 Alexandre Oliva * pt.c (build_non_dependent_expr): Leave ADDR_EXPR of COMPONENT_REF alone. 2006-05-11 Volker Reichelt PR c++/27547 * decl.c (copy_fn_p): Return early on non-member functions. 2006-05-08 Volker Reichelt PR c++/27447 * decl2.c (build_memfn_type): Skip invalid functions and class types. 2006-05-06 Volker Reichelt PR c++/27427 * pt.c (convert_nontype_argument): Return early on invalid arguments. * pt.c (process_template_parm): Remove superfluous temporary. PR c++/27430 * pt.c (process_template_parm): Handle erroneous non-type parameters. PR c++/27423 * typeck.c (convert_for_initialization): Skip erroneous types. PR c++/27422 * typeck.c (convert_arguments): Return early on args with invalid types. 2006-05-03 Aldy Hernandez PR/21391 * typeck.c (build_static_cast_1): Save casted types in used types hash table. (build_reinterpret_cast_1): Same. * rtti.c (build_dynamic_cast_1): Same. 2006-05-04 Jakub Jelinek PR c++/27359 * parser.c (cp_parser_omp_for_loop): Only call cp_parser_abort_tentative_parse if cp_parser_parse_definitely was not called. 2006-05-02 Mark Mitchell PR c++/27102 * decl.c (grokdeclarator): Robustify checks for defining members of incomplete types. PR c++/27309 * class.c (add_method): Call grok_special_member_properties. * decl.c (grokdeclarator): Don't call it here. (copy_fn_p): A TEMPLATE_DECL is never a copy constructor or assignment operator. Set TYPE_HAS_CONSTURCTOR if DECL is a constructor. (start_method): Don't call grok_special_member_properties. * method.c (implicitly_declare_fn): Likewise. * pt.c (instantiate_class_template): Likewise. * decl2.c (grokfield): Likewise. 2006-05-02 Jakub Jelinek PR middle-end/27337 * cp-gimplify.c (cxx_omp_privatize_by_reference): New function. * cp-tree.h (cxx_omp_privatize_by_reference): New prototype. * cp-objcp-common.h (LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE): Define. 2006-04-30 Mark Mitchell PR c++/27094 * pt.c (tsubst_default_argument): Increment function_depth around call to tsubst_expr. * parser.c (cp_parser_parameter_declaration): Likewise. * decl2.c (mark_used): Tidy. 2006-04-30 Volker Reichelt PR c++/27278 * decl.c (grok_op_properties): Skip operators with invalid args when checking for class-type or enum-type args. 2006-04-29 Volker Reichelt PR c++/27279 * decl.c (copy_fn_p): Skip functions with invalid first arg. 2006-04-27 Mark Mitchell PR c++/27292 * tree.c (rvalue): Convert bitfields to their declared types. PR c++/27102 * typeck2.c (cxx_incomplete_type_diagnostic): Handle TYPENAME_TYPE. 2006-04-24 Mark Mitchell PR c++/27292 * typeck.c (decay_conversion): Don't adjust bitfield types. (perform_integral_promotions): Treat bitfield enums as enums, not as short integer types. * tree.c (rvalue): Convert bitfields to their correct types. 2006-04-24 Volker Reichelt PR c++/19963 * class.c (layout_class_type): Skip fields with invalid types. 2006-04-23 Mark Mitchell PR c++/26912 * cp-tree.h (build_this_parm): Declare. (grok_method_quals): Remove. (build_memfn_type): Declare. (build_artificial_parm): Declare. (do_friend): Remove quals parameter. * decl.c (build_this_parm): New function. (grokfndecl): Use it. Do not pass quals to grokclassfn. (grokdeclarator): Rename quals to memfn_quals. Avoid allocating unnecessary TYPE_DECLs. Correct qualification of member function types. Tidy. * method.c (implicitly_declare_fn): Use build_this_parm. * friend.c (do_friend): Remove quals parameter. * decl2.c (grok_method_quals): Remove. (build_memfn_type): New function. (build_artificial_parm): Give it external linkage. (grokclassfn): Remove quals parameter. Do not build "this" PARM_DECL here. PR c++/26534 * cp-tree.h (is_bitfield_expr_with_lowered_type): New function. * typeck.c (is_bitfield_expr_with_lowered_type): New function. (decay_conversion): Convert bitfield expressions to the correct type. (build_modify_expr): Remove spurious conversions. * class.c (layout_class_type): Modify the type of bitfields to indicate a limited range. * call.c (standard_conversion): Adjust the type of bitfield expressions used in an rvalue context. (build_conditional_expr): Likewise. 2006-04-22 Kazu Hirata * decl.c: Fix comment typos. 2006-04-21 Eric Christopher * decl.c: Fix typo in function name. 2006-04-19 Volker Reichelt PR c++/26558 * parser.c (cp_parser_class_name): Check for invalid typenames. Rearrange code. PR c++/26739 * pt.c (tsubst_friend_function): Return early if pushdecl_namespace_level fails. PR c++/26036 * typeck.c (convert_arguments): Return error_mark_node instead of error_mark_list. * cp-tree.h (error_mark_list): Remove declaration. * decl.c (error_mark_list): Remove definition. (cxx_init_decl_processing): Do not initialize error_mark_list. PR c++/10385 * rtti.c (build_dynamic_cast_1): Check for invalid conversions before calling convert_to_reference. * cvt.c (convert_to_reference): Assert that reftype is a REFERENCE_TYPE. 2006-04-19 Mark Mitchell PR c++/27102 * class.c (currently_open_class): Tidy. * decl.c (grokdeclarator): If we encounter an erroneous declarator, assume that we have already issued an error message and return. Return error_mark_node instead of NULL_TREE in more places. Issue errors about function definitions that do not have a function declarator. Check for complete types for all function definitions. * cp-tree.h (cp_error_declarator): Remove. (currently_open_class): Change return type. * parser.c (cp_parser_id_expression): Add optional_p parameter. (cp_parser_parse_diagnose_invalid_type_name): Adjust calls. (cp_parser_id_expression): Likewise. (cp_parser_unqualified_id): If the name is optional, return NULL_TREE. (cp_parser_postfix_dot_deref_expression): Adjust calls. (cp_parser_type_parameter): Likewise. (cp_parser_unqualified_id): Likewise. (cp_parser_direct_declarator): Likewise. (cp_parser_declarator_id): Add optional_p parameter. (cp_parser_function_definition_from_specifiers_and_declarator): Assume that start_function indicates failure only if it has issued an error. (cp_parser_omp_var_list_no_open): Adjust calls. 2006-04-17 Janis Johnson PR c++/26114, c++/26115 * typeck.c (cxx_mark_addressable): Restore check for extra_warnings. * class.c (check_field_decls): Ditto. 2006-04-17 Volker Reichelt * init.c (build_offset_ref): Remove superfluous temporary. 2006-04-16 Mark Mitchell PR c++/26365 * typeck.c (finish_class_member_access_expr): Robustify 2006-04-15 Kazu Hirata * Make-lang.in (cp/pt.o): Depend on vecprim.h. * pt.c: Include vecprim.h. (inline_parm_levels): Change the type to VEC(int,heap) *. (inline_parm_levels_used): Remove. (maybe_begin_member_template_processing, maybe_end_member_template_processing): Use VEC instead of VARRAY. * cp/call.c: Fix comment typos. 2006-04-12 Mark Mitchell * parser.c (cp_parser_init_declarator): Initialize local variables aggressively. 2006-04-12 Roger Sayle * parser.c (cp_parser_init_declarator): Initialise is_parenthesized_init to false to avoid compiler warning. 2006-04-11 Mark Mitchell * cp-tree.h (build_operator_new_call): Adjust prototype. (build_new_method_call): Likewise. (build_op_delete_call): Likewise. * init.c (build_raw_new_expr): New function. (build_new_1): Pass information as parameters, rather than bundling it into a NEW_EXPR. (build_new): Adjust accordingly. (build_vec_delete_1): Adjust for changes to build_op_delete_call. (build_delete): Likewise. * decl.c (finish_destructor_body): Likewise. * call.c (build_operator_new_call): Return the allocation function used. (build_op_delete_call): Take allocation function as parameter. (build_special_member_call): Adjust call to build_new_method_call. (build_new_method_call): Return function called. * pt.c (tsubst_copy_and_build): Adjust call to build_new_method_call. * semantics.c (finish_call_expr): Likewise. * parser.c (cp_parser_postfix_expression): Likewise. * typeck2.c (cxx_incomplete_type_diagnostic): Refer to "incomplete", not "undefined", types. PR c++/26295 * decl.c (grokdeclarator): Remove namespace-handling code for pointers-to-members. * parser.c (cp_parser_ptr_operator): Check for qualified names using namespaces. PR c++/26122 * parser.c (cp_parser_init_declarator): Adjust logic for deciding whether or not to look for a pure-specifier. (cp_parser_member_declaration): Likewise. 2006-04-08 Kazu Hirata * decl2.c, pt.c, semantics.c: Fix comment typos. 2006-04-06 Roger Sayle * call.c (null_ptr_cst_p): Add explicit TREE_CONSTANT_OVERFLOW check. 2006-04-05 Jason Merrill * name-lookup.c (push_namespace_with_attribs): Temporarily disable default hidden visibility for anonymous namespace. 2006-03-29 Roger Sayle PR c++/22494 * init.c (build_vec_delete_1): Convert BASE pointer's type to the base pointer type to avoid a type mismatch in the EQ_EXPR. 2006-03-24 Carlos O'Donell * search.c (maybe_suppress_debug_info): If flag_emit_class_debug_always then don't suppress. 2006-03-22 Jason Merrill * name-lookup.c (push_namespace_with_attribs): Only apply hidden visibility to anonymous namespaces if HAVE_GAS_HIDDEN. 2006-03-21 Jakub Jelinek PR c++/26691 * cp-gimplify.c (cxx_omp_clause_apply_fn): Handle default arguments. 2006-03-21 Jason Merrill PR c++/21581 * parser.c (cp_parser_declaration): Support attributes on anonymous namespaces. * name-lookup.c (push_namespace_with_attribs): Anonymous namespaces default to hidden visibility. 2006-03-20 Jason Merrill PR c++/21764, c++/19238 * decl.c (cp_finish_decl): Call determine_visibility later. (start_preparsed_function): Likewise. * cp-tree.h (CP_TYPE_CONTEXT, TYPE_NAMESPACE_SCOPE_P): New macros. (TYPE_CLASS_SCOPE_P, TYPE_FUNCTION_SCOPE_P): New macros. * name-lookup.h (struct cp_binding_level): Add has_visibility bitfield. * name-lookup.c: Include c-pragma.h. (push_namespace_with_attribs): Split out from push_namespace. Push visibility if appropriate. Set TREE_PUBLIC on namespaces. (leave_scope): Pop visibility if appropriate. * decl2.c (determine_visibility_from_class): Split out from... (determine_visibility): ...here. Handle function scope and nested classes. (import_export_decl): Move visibility handling to determine_visibility_from_class. * parser.c (cp_parser_declaration, cp_parser_namespace_name): Allow attributes on namespace declarations. 2006-03-15 Volker Reichelt PR c++/6634 * decl.c (grokdeclarator): Do not accept long long double. Reorganize checks for invalid (combinations of) type modifiers. Quote modifiers in messages. 2006-03-09 Jason Merrill PR c++/16387, c++/16389 * typeck.c (cxx_alignof_expr, cxx_sizeof_expr): New functions. (cxx_sizeof_or_alignof_expr): Split out from here. 2006-03-09 Diego Novillo Merge from gomp-20050608-branch 2006-02-02 Diego Novillo * decl.c (pop_labels_1): Use appropriate pointer casting. (poplevel_named_label_1): Likewise. (named_label_entry_hash): Likewise. (named_label_entry_eq): Likewise. (check_goto): Likewise. (define_label): Likewise. 2006-01-26 Diego Novillo * cp-tree.h (CP_OMP_CLAUSE_INFO): Use TREE_TYPE instead of TREE_BLOCK. * pt.c: Use OMP_CLAUSE_CODE and OMP_CLAUSE_OPERAND instead of TREE_CODE/TREE_OPERAND. * semantics.c: Likewise. * parser.c: Likewise. 2005-11-10 Diego Novillo * parser.c (cp_parser_omp_threadprivate): Emit diagnostic if target does not support TLS. 2005-11-09 Jakub Jelinek * decl.c (redeclaration_error_message): Don't error about DECL_THREAD_LOCAL_P mismatches if CP_DECL_THREADPRIVATE_P (olddecl). 2005-11-08 Jakub Jelinek PR c++/24735 * semantics.c (finish_omp_barrier, finish_omp_flush): New functions. * parser.c (cp_parser_omp_barrier): Call finish_omp_barrier. (cp_parser_omp_flush): Call finish_omp_flush. * cp-tree.h (finish_omp_barrier, finish_omp_flush): New prototypes. PR c++/24734 * pt.c (tsubst_expr): Handle OMP_MASTER and OMP_ORDERED. 2005-11-03 Jakub Jelinek * semantics.c (finish_omp_threadprivate): Error on class-scope variables. 2005-11-02 Jakub Jelinek * parser.c (cp_parser_omp_all_clauses): If some clause type is not allowed, don't remove just one of the clauses, but all clauses added in that loop round. * semantics.c (finish_omp_clauses): Fix function comment. Don't handle non-const or mutable specially, as const and not mutable is predetermined shared and that leads to double error. Don't ICE if copyin var is PARM_DECL. PR c++/24613 * parser.c (cp_parser_pragma): Diagnose PRAGMA_OMP_SECTION outside of PRAGMA_OMP_SECTIONS construct. * semantics.c (finish_omp_threadprivate): Error if V is automatic variable or has incomplete type. 2005-11-01 Diego Novillo * parser.c (cp_parser_omp_all_clauses): Use OMP_CLAUSE_CHAIN instead of TREE_CHAIN. 2005-11-01 Diego Novillo * parser.c (cp_parser_omp_all_clauses): When emitting an error message, remove the invalid clause from the list. 2005-10-31 Diego Novillo * parser.c (cp_parser_omp_parallel): Do not allow 'nowait' in combined parallel+workshare directives. 2005-10-31 Richard Henderson * cp-objcp-common.h (LANG_HOOKS_OMP_CLAUSE_DTOR): Use cxx_omp_clause_dtor. * cp-tree.h (CP_OMP_CLAUSE_INFO): New. (cxx_omp_clause_dtor): New. * cp-gimplify.c (cxx_omp_clause_apply_fn): New. (cxx_omp_clause_default_ctor): Use it. (cxx_omp_clause_copy_ctor, cxx_omp_clause_assign_op): Likewise. (cxx_omp_clause_dtor): New. * semantics.c (finish_omp_clauses): Rewrite cdtor checking to fill in CP_OMP_CLAUSE_INFO. Don't specialcase LASTPRIVATE for removal. (cxx_omp_clause_default_ctor, cxx_omp_clause_copy_ctor, cxx_omp_clause_assign_op): Move to cp-gimplify.c. 2005-10-28 Jakub Jelinek * semantics.c (finish_omp_threadprivate): If DECL_RTL_SET_P, call make_decl_rtl again so that encode_section_info can update SYMBOL_REF's flags. 2005-10-26 Jakub Jelinek * semantics.c (finish_omp_for): Don't segfault if COND or INCR is NULL. If not calling c_finish_omp_for right away and one of COND and INCR is NULL, issue error and don't expand anything. PR c++/24512 * cp-tree.h (finish_omp_for): Add PRE_BODY argument. * semantics.c (finish_omp_for): Likewise. Set OMP_FOR_PRE_BODY to PRE_BODY if deferring, add it into the current statement list if not processing template decl or pass it to c_finish_omp_for. * parser.c (cp_parser_omp_for_loop): Expand optional DECL_EXPRs into PRE_BODY statement list. Pass it to finish_omp_for. * pt.c (tsubst_expr) : tsubst_expr also OMP_FOR_PRE_BODY into PRE_BODY stmt list, pass it to finish_omp_for. Put all the statements into sk_omp scope. 2005-10-25 Jakub Jelinek PR c++/24516 * parser.c (struct cp_parser): Rename in_iteration_statement field to in_statement. (IN_SWITCH_STMT, IN_ITERATION_STMT): Define. (IN_OMP_BLOCK, IN_OMP_FOR): Change values. (cp_parser_new, cp_parser_begin_omp_structured_block, cp_parser_end_omp_structured_block, cp_parser_omp_for_loop): Adjust for in_iteration_statement renaming. (cp_parser_selection_statement): Save parser->in_iteration, or it temporarily with IN_SWITCH_STMT for the cp_parser_implicitly_scoped_statement call. (cp_parser_iteration_statement): Adjust for in_iteration_statement renaming. Use IN_ITERATION_STMT rather than true. (cp_parser_jump_statement): Adjust for in_iteration_statement renaming and new values. Don't error on break in a switch statement within OMP_FOR or OpenMP structured block. PR c++/24513 * parser.c (cp_parser_cache_group): Don't stop if next token is CPP_PRAGMA_EOL and end is CPP_PRAGMA_EOL as well. If current token is CPP_PRAGMA, consume everything until CPP_PRAGMA_EOL inclusive. 2005-10-24 Jakub Jelinek PR c++/24502 * semantics.c (finish_omp_for): Handle MODOP_EXPR in addition to MODIFY_EXPR. 2005-10-23 Richard Henderson * cp-gimplify.c (struct cp_gimplify_ctx): Remove. (bc_label): New. (begin_bc_block, finish_bc_block): Use it. (push_context, pop_context): Remove. (cp_genericize): Don't use them. Assert bc_label is null. * semantics.c (finish_omp_clauses): Create a fake data element of TYPE for probing ctors. 2005-10-23 Richard Henderson * cp-objcp-common.h (LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR): New. (LANG_HOOKS_OMP_CLAUSE_COPY_CTOR): New. (LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP): New. (LANG_HOOKS_OMP_CLAUSE_DTOR): New. * semantics.c (finish_omp_clauses): Look through arrays when looking up special member calls. Also remove FIRSTPRIVATE when LASTPRIVATE fails. (cxx_omp_clause_default_ctor, cxx_omp_clause_copy_ctor): New. (cxx_omp_clause_assign_op): New. * cp-tree.h: Declare them. 2005-10-21 Richard Henderson * decl.c (check_previous_goto_1): Return false if error. (check_switch_goto): Likewise. (finish_case_label): Don't emit the case label on error. * parser.c (struct cp_parser): Revert in_switch_statement_p changes. (cp_parser_labeled_statement, cp_parser_selection_statement): Likewise. (cp_parser_begin_omp_structured_block): Don't save... (cp_parser_end_omp_structured_block): or restore in_switch_statement_p. 2005-10-21 Richard Henderson * semantics.c (finish_omp_threadprivate): Set decl_flags.u2sel when necessary. 2005-10-21 Richard Henderson * decl.c (poplevel_named_label_1): Restore creation of the bad_decls list. (decl_jump_unsafe): Check for error_mark_node types. (check_goto): Don't check cdtor_label. Don't use identify_goto. * semantics.c (finish_return_stmt): Do check_omp_return before converting to cdtor_label goto. 2005-10-21 Richard Henderson PR c++/24451 * decl.c (check_omp_return): Return false on error. * cp-tree.h (check_omp_return): Update decl. * semantics.c (finish_return_stmt): Avoid adding return on error. 2005-10-21 Richard Henderson * cp-tree.h (struct language_function): Remove x_named_label_uses. Change x_named_labels to a hashtable. (check_omp_return): Declare. * decl.c (struct named_label_use_entry): Rename from named_label_use_list. Remove label_decl. (struct named_label_entry): Rename from named_label_list. Remove old_value and next. Change in_try_scope and in_catch_scope to bool. Add in_omp_scope. (pop_labels_1): New. (pop_labels): Use it. (pop_local_label, poplevel_named_label_1): New. (poplevel): Use them. (named_label_entry_hash, named_label_entry_eq): New. (make_label_decl): Create named_labels. Move label creation bits from lookup_label. (declare_local_label): Tidy. (identify_goto): Split out from ... (check_previous_goto_1): Add exited_omp argument. Handle omp scopes. (use_label): Merge into... (check_goto): ... here. Handle omp scopes. (check_omp_return): New. (check_previous_gotos): Merge into... (define_label): ... here. (save_function_data): Remove x_named_label_uses reference. (finish_function): Likewise. * name-lookup.h (sk_omp): New. * name-lookup.c (begin_scope): Handle it. * parser.c (cp_parser_omp_for): Don't create extra compound stmt. (cp_parser_omp_sections): Likewise. * semantics.c (finish_return_stmt): Call check_omp_return. (begin_omp_structured_block): Use sk_omp. (finish_omp_structured_block): Use do_poplevel. Don't build a MUST_NOT_THROW expression here. (begin_omp_parallel, finish_omp_parallel): Don't create extra compound statements. 2005-10-21 Diego Novillo PR 24455 * cp/cp-tree.h (struct lang_decl_flags): Add field threadprivate_p. (CP_DECL_IS_THREADPRIVATE): Define. * cp/semantics.c (finish_omp_threadprivate): Set. Do not error out if CP_DECL_IS_THREADPRIVATE is set already. * cp/decl.c (duplicate_decls): Merge CP_DECL_THREADPRIVATE_P. 2005-10-20 Richard Henderson * cp-gimplify.c (cp_gimplify_omp_for): New. (cp_gimplify_expr): Call it. * cp-tree.h (OMP_FOR_GIMPLIFYING_P): New. * parser.c (struct cp_parser): Rename in_iteration_statement_p to in_iteration_statement and change to unsigned char. Similarly with in_switch_statement. Update all users. (IN_OMP_BLOCK, IN_OMP_FOR): New. (cp_parser_labeled_statement): Diagnose case labels binding closer to an openmp block nested than the switch. (cp_parser_jump_statement): Diagnose break and continue labels binding closer to an openmp block than an iteration or switch. (cp_parser_omp_for_loop): Mark in_iteration_statement for an omp for. (cp_parser_begin_omp_structured_block): New. (cp_parser_end_omp_structured_block): New. (cp_parser_omp_structured_block): Use them. (cp_parser_omp_for, cp_parser_omp_sections_scope): Likewise. (cp_parser_omp_parallel): Likewise. 2005-10-20 Richard Henderson * semantics.c (begin_omp_structured_block): New. (finish_omp_structured_block): New. (begin_omp_parallel, finish_omp_parallel): Use them. * parser.c (cp_parser_omp_structured_block): Likewise. (cp_parser_omp_for): Likewise. (cp_parser_omp_sections_scope): Likewise. * cp-tree.h: Declare them. 2005-10-20 Richard Henderson * parser.c (cp_parser_omp_master): Return the statement. (cp_parser_omp_ordered): Likewise. (cp_parser_omp_construct): Set the locus for them. 2005-10-19 Richard Henderson * semantics.c (finish_omp_atomic): Revert to uses_template_parms. 2005-10-19 Richard Henderson * semantics.c (finish_omp_clauses): Avoid DECL_THREAD_LOCAL_P on a PARM_DECL. Remove some stub asserts guaranteed to fail. 2005-10-19 Richard Henderson * cp-tree.h (OMP_ATOMIC_DEPENDENT_P, OMP_ATOMIC_CODE): New. (finish_omp_clauses, finish_omp_for, finish_omp_atomic): New. * parser.c (cp_parser_omp_clause_copyin): Remove. (cp_parser_omp_all_clauses): Use cp_parser_omp_var_list instead. Call finish_omp_clauses. (cp_parser_omp_clause_if): Don't do error checking here. (cp_parser_omp_clause_num_threads): Likewise. (cp_parser_omp_clause_schedule): Likewise. (cp_parser_omp_atomic): Use finish_omp_atomic. (cp_parser_omp_for_loop): Don't discard DECL_EXPR. Don't decompose assignment statment here. Use finish_omp_for. * pt.c (tsubst_omp_clauses): New. (tsubst_expr): Handle OMP_PARALLEL, OMP_FOR, OMP_SECTIONS, OMP_SINGLE, OMP_SECTION, OMP_CRITICAL, OMP_ATOMIC. * semantics.c (finish_omp_clauses): New. (begin_omp_parallel, finish_omp_parallel): Know Less about the internals of the stmt_list stack. (finish_omp_for, finish_omp_atomic): New. 2005-10-18 Jakub Jelinek * semantics.c (cxx_omp_predetermined_sharing): New function. * cp-tree.h (cxx_omp_predetermined_sharing): New prototype. * cp-objcp-common.h (LANG_HOOKS_OMP_PREDETERMINED_SHARING): Redefine. 2005-10-18 Richard Henderson * parser.c (cp_parser_omp_single): Use make_node and accessors instead of build. 2005-10-17 Richard Henderson * parser.c (cp_parser_omp_for_loop): Handle declarations. 2005-10-12 Richard Henderson * Make-lang.in (CXX_C_OBJS): Add c-omp.o. * cp-tree.h (begin_omp_parallel, finish_omp_parallel): Declare. (finish_omp_threadprivate): Declare. * parser.c (struct cp_lexer): Add in_pragma. (cp_lexer_consume_token): Don't consume a PRAGMA_EOL when in_pragma. (cp_parser_skip_to_closing_parenthesis): Stop at PRAGMA_EOL. (cp_parser_skip_to_end_of_statement): Likewise. (cp_parser_skip_to_end_of_block_or_statement): Likewise. (cp_parser_skip_to_closing_brace): Likewise. (cp_parser_skip_to_pragma_eol): Reset in_pragma. (cp_parser_require_pragma_eol): New. (cp_parser_statement): Add in_compound argument; update all callers. Restart if a non-statement pragma seen outside a compound. (cp_parser_statement_seq_opt): Stop at PRAGMA_EOL. (cp_parser_declaration_seq_opt): Likewise. (cp_parser_member_specification_opt): Likewise. (cp_parser_function_definition_after_decl): Likewise. (cp_parser_skip_until_found): Likewise. (cp_parser_cache_group): Likewise. (enum pragma_omp_clause, cp_parser_omp_clause_name, check_no_duplicate_clause, cp_parser_omp_var_list_no_open, cp_parser_omp_var_list, cp_parser_omp_clause_copyin, cp_parser_omp_clause_default, cp_parser_omp_clause_if, cp_parser_omp_clause_nowait, cp_parser_omp_clause_num_threads, cp_parser_omp_clause_ordered, cp_parser_omp_clause_reduction, cp_parser_omp_clause_schedule, cp_parser_omp_all_clauses, cp_parser_omp_structured_block, cp_parser_omp_atomic, cp_parser_omp_barrier, cp_parser_omp_critical, cp_parser_omp_flush, cp_parser_omp_for_loop, cp_parser_omp_for, cp_parser_omp_master, cp_parser_omp_ordered, cp_parser_omp_sections_scope, cp_parser_omp_sections, cp_parser_omp_parallel, cp_parser_omp_single, cp_parser_omp_threadprivate, cp_parser_omp_construct): New. (cp_parser_pragma): Handle OpenMP pragmas. * semantics.c (finish_omp_threadprivate): New. (begin_omp_parallel, finish_omp_parallel): New. 2005-10-11 Richard Henderson * parser.c (struct cp_token): Add pragma_kind. (eof_token): Initialize it. (cp_lexer_handle_pragma): Remove. (cp_parser_initial_pragma): New. (cp_lexer_new_main): Use it. (cp_lexer_get_preprocessor_token): Initialize pragma_kind. (cp_lexer_print_token): Don't handle CPP_PRAGMA. (cp_parser_skip_to_pragma_eol): New. (cp_parser_error): Use it. (pragma_lex): New. 2005-10-09 Richard Henderson * lex.c (parse_strconst_pragma): Update for c_lex name change. (handle_pragma_java_exceptions): Likewise. * parser.c (cp_lexer_new_main): Likewise. 2005-10-06 Richard Henderson * parser.c (cp_lexer_new_main): Comment out defer_pragmas. (cp_lexer_handle_pragma): Comment out cpp_handle_deferred_pragma. 2005-10-01 Richard Henderson * name-lookup.c (lookup_name): Remove prefer_type argument. (lookup_name_prefer_type): New function. * name-lookup.h (lookup_name_prefer_type): Declare it. * decl.c (lookup_and_check_tag): Use it. * pt.c (tsubst_friend_class): Likewise. Update for lookup_name change. (lookup_template_class, tsubst_copy_and_build): Likewise. 2006-03-06 Volker Reichelt PR c++/15759 * tree.c (bot_manip): Don't call mark_used. 2006-03-02 Mike Stump * decl2.c (import_export_decl): Remove redundant call to targetm.cxx.key_method_may_be_inline (). 2006-03-02 Richard Sandiford * decl.c (start_decl): Use have_global_bss_p when deciding whether to make the decl common. 2006-03-01 Mike Stump PR darwin/25908 * decl2.c (import_export_decl): Fix ABI breakage on darwin. 2006-02-24 Geoffrey Keating * except.c (expand_start_catch_block): Handle flag_use_cxa_get_exception_ptr. 2006-02-22 Volker Reichelt PR c++/26291 * decl.c (grok_op_properties): Check for ellipsis in arguments of operators. 2006-02-20 Rafael Ávila de Espíndola * Make-lang.in (C++): Remove. (.PHONY): Remove C++. 2006-02-18 Mark Mitchell PR c++/26266 * cp-tree.h (cp_finish_decl): Adjust declaration. (grokbitfield): Likewise. (finish_static_data_member_decl): Likewise. * init.c (constant_value_1): Ensure processing_template_decl when folding non-dependent initializers for static data members of dependent types. Return error_mark_node for erroneous initailizers. * class.c (get_vtable_decl): Use finish_decl, not cp_finish_decl. * decl.c (cp_make_fname_decl): Adjust call to cp_finish_decl. (cp_finish_decl): Add init_const_expr_p parameter. Set DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P here. (finish_decl): Adjust call to cp_finish_decl. (compute_array_index_type): Robustify. (start_method): Use finish_decl, not cp_finish_decl. * rtti.c (emit_tinfo_decl): Likewise. * except.c (initialize_handler_parm): Adjust call to cp_finish_decl. (expand_start_catch_block): Likewise. * cvt.c (build_up_reference): Adjust call to cp_finish_decl. * pt.c (instantiate_class_template): Adjust call to finish_static_data_member_decl. (tsubst_expr): Use finish_decl, not cp_finish_decl. (instantiate_decl): Adjust call to cp_finish_decl. * name-lookup.c (pushdecl_top_level_1): Use finish_decl, not cp_finish_decl. * decl2.c (finish_static_data_member_decl): Add init_const_expr_p parameter. (grokfield): Likewise. * parser.c (cp_parser_condition): Check for constant initializers. (cp_parser_init_declarator): Adjust calls to grokfield and cp_finish_decl. Don't set DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P here. (cp_parser_member_declaration): Likewise. (cp_parser_objc_class_ivars): Likewise. 2006-02-14 Volker Reichelt * call.c (standard_conversion): Return NULL instead of 0. (build_user_type_conversion_1): Likewise. (tourney): Likewise. * decl.c (redeclaration_error_message): Likewise. * error.c (language_to_string): Likewise. 2006-02-13 Volker Reichelt * cp-tree.h (warn_hidden): Remove prototype. * class.c (warn_hidden): Make static. * cp-tree.h (build_type_conversion): Remove prototype. * cvt.c (build_type_conversion): Add prototype, make static. * cp-tree.h (push_tinst_level): Remove prototype. (pop_tinst_level): Likewise. * pt.c (push_tinst_level): Add prototype, make static. (pop_tinst_level): Likewise. 2006-02-13 Volker Reichelt * decl.c (grokdeclarator): Return NULL_TREE instead of 0. * typeck.c (unary_complex_lvalue): Likewise. 2006-02-13 Volker Reichelt * lex.c (parse_strconst_pragma): Return error_mark_node instead of "(tree)-1" to indicate failure. Simplify. (handle_pragma_interface): Test for error_mark_node instead of "(tree)-1". (handle_pragma_implementation): Likewise. 2006-02-13 Volker Reichelt PR c++/26151 * parser.c (cp_parser_decl_specifier_seq): Check for duplicate decl-specifiers. Remove extra check for duplicate 'friend'. * decl.c (grokdeclarator): Remove check for duplicate decl-specifiers. Set longlong together with long_p. 2006-02-12 Jason Merrill PR c++/24996 * except.c (build_throw): Add a CLEANUP_POINT_EXPR inside the TRY_CATCH_EXPR or MUST_NOT_THROW_EXPR. 2006-02-10 Volker Reichelt * class.c (debug_class): Remove extern. (debug_thunks): Likewise. 2006-02-09 Gabriel Dos Reis * typeck.c (string_conv_p): Don't test for flag_const_strings. 2006-02-08 Jason Merrill PR c++/25979 * cp-gimplify.c (cp_gimplify_expr): Don't call cp_gimplify_init_expr for MODIFY_EXPRs. * typeck2.c (split_nonconstant_init_1): Use INIT_EXPR. 2006-02-08 Volker Reichelt PR c++/26071 * decl.c (grokdeclarator): Set dname also for destructor. PR c++/26070 * decl.c (grokdeclarator): Clear storage_class together with staticp. 2006-02-07 Gabriel Dos Reis * cp-tree.h (tf_warning_or_error): Renamed from tf_warn_or_error. (cp_build_qualified_type): Propogate renaming. * call.c (convert_like_real): Likewise. * cvt.c (cp_convert_to_pointer, convert_to_reference): Likewise. * decl.c (make_typename_type, grokdeclarator): Likewise. * pt.c (tsubst_friend_function, instantiate_class_template, tsubst_default_argument, instantiate_decl, tsubst_initializer_list, tsubst_enum): Likewise. * semantics.c (finish_template_type): Likewise. * typeck.c (build_ptrmemfunc, convert_for_assignment): Likewise. 2006-02-07 Dirk Mueller * typeck.c (build_binary_op): Annotate div-by-zero warnings to make -Wno-div-by-zero have an effect. 2006-02-07 Mark Mitchell PR c++/9737 * pt.c (coerce_template_template_parms): Do not templates with excess default arguments to match template template parameters with fewer parameters. (coerce_template_parms): Add use_default_args parameter; use default arguments only when true. (lookup_template_class): Adjust call to coerce_template_parms. (fn_type_unification): Likewise. (unify): Likewise. (get_bindings): Likewise. (dependent_type_p): Add assertions. 2006-02-06 Roger Sayle * decl.c (grokdeclarator): Don't bother checking for CHAR_TYPE. * rtti.c (typeinfo_in_lib_p): Likewise. * cp-tree.h (INTEGRAL_CODE_P, CP_INTEGRAL_TYPE_P): Likewise. * name-lookup.c (arg_assoc_type): Likewise. 2006-02-04 Gabriel Dos Reis * cp-tree.h (tf_warn_or_error): New substituion flag. (cp_build_qualified_type): Use it. * call.c (convert_like_real): Likewise. * cvt.c (cp_convert_to_pointer): Likewise. (convert_to_reference): Likewise. * decl.c (make_typename_type): Likewise. (grokdeclarator): Likewise. * pt.c (tsubst_friend_function): Likewise. (tsubst_friend_class): Likewise. (instantiate_class_template): Likewise. (tsubst_default_argument): Likewise. (instantiate_decl): Likewise. (tsubst_initializer_list): Likewise. (tsubst_enum): Likewise. * semantics.c (finish_template_type): Likewise. * typeck.c (build_ptrmemfunc): Likewise. (convert_for_assignment): Likewise. 2006-02-03 Lee Millward * typeck.c (string_conv_p): Pass appropiate OPT_Wxxxx values when calling warning(). (build_array_ref, cxx_mark_addressable): Likewise. (check_return_expr): Likewise. * init.c (perform_member_init): Likewise. (sort_mem_initializers, emit_mem_initializers): Likewise. * class.c (check_field_decls): Likewise. (warn_about_ambiguous_bases): Likewise. * decl.c (pop_label, poplevel): Likewise. (duplicate_decls, grok_op_properties): Likewise. (start_preparsed_function, finish_function): Likewise. * name-lookup.c (pushdecl_maybe_friend): Likewise. (pushdecl_maybe_friend): Likewise. * parser.c (cp_parser_warn_min_max): Likewise. (cp_parser_cast_expression): Likewise. * method.c (lazily_declare_fn): Likewise. * cvt.c (convert_to_void): Likewise. * mangle.c (finish_mangling): Likewise. * cp-gimplify.c (gimplify_expr_stmt): Likewise. 2006-02-03 Mark Mitchell * name-lookup.c (do_class_using_decl): Use IDENTIFIER_TYPENAME_P, not IDENTIFIER_OPNAME_P. 2006-01-31 Mark Mitchell PR c++/25342 * cp-tree.h (DECL_TEMPLATE_SPECIALIZATIONS): Revise documentation. * pt.c (determine_specialization): Use INNERMOST_TEMPLATE_PARMS, not TREE_VALUE. (instantiate_class_template): Simplify. (verify_class_unification): Remove. (unify): Document parameters. Use INNERMOST_TEMPLATE_ARGS to permit multiple levels of template arguments. (more_specialized_class): Simplify. (get_class_bindings): Pass full arguments to unify. Fold verify_class_unification into this function. Return full arguments. (most_specialized_class): Adjust for changes to get_class_bindings. Issue errors here for ambiguity. Return the fully deduced arguments for the most specialized class, in addition to the partial specialization. 2006-01-31 Ben Elliston * mangle.c: Comment fix. 2006-01-29 Gabriel Dos Reis * Make-lang.in (cp-warn): Include CXX_COMPAT_WARN. * repo.c (extract_string, afgets): Use cast when converting from void *. 2006-01-29 Gabriel Dos Reis * call.c (alloc_conversion): Use cast when converting from void *. (alloc_conversions): Likewise. (add_candidate): Likewise. (print_z_candidates): Likewise. (add_warning): Likewise. * pt.c (retrieve_local_specialization): Likewise. (process_partial_specialization): Likewise. (mangle_class_name_for_template): Likewise. (tsubst_template_args): Likewise. * typeck2.c (pat_calc_hash): Likewise. (pat_compare): Likewise. (abstract_virtuals_error): Likewise. * class.c (method_name_cmp): Likewise. (resort_method_name_cmp): Likewise. (get_vfield_name): Likewise. * decl2.c (generate_ctor_and_dtor_functions_for_priority): Likewise. * lex.c (init_reswords): Likewise. * rtti.c (create_pseudo_type_info): Likewise. * search.c (dfs_lookup_base): Likewise. (dfs_dcast_hint_pre): Likewise. (dfs_dcast_hint_post): Likewise. * tree.c (hash_tree_cons): Likewise. * repo.c (extract_string): Likewise. (afgets): Likewise. * cp-objcp-common.c (decl_shadowed_for_var_lookup): Likewise. * g++spec.c (lang_specific_driver): Likewise. 2006-01-28 Gabriel Dos Reis * call.c (joust): Pass option code to warning. Use inform for explanation. * class.c (check_bases): Likewise. (maybe_warn_about_overly_private_class): Likewise. (check_field_decls): Likewise. (layout_empty_base): Likewise. (layout_virtual_bases): Likewise. (layout_class_type): Likewise. 2006-01-28 Mark Mitchell PR c++/25999 * decl.c (start_preparsed_function): Call maybe_apply_pragma_weak here, not ... (start_function): ... here. 2006-01-28 Mark Mitchell PR c++/25855 * class.c (resolve_address_of_overloaded_function): Adjust use of return value from most_specialized_instantiation. * pt.c (determine_specialization): Avoid multiple calls to get_bindings. (most_specialized_instantiation): When a tie occurs, set the current presumed champion to the next template. Return the TREE_LIST node containing the template, rather than the template itself. (most_specialized): Remove. * name-lookup.c (push_overloaded_decl): When duplicate_decls indicates a failed redeclaration, report that to callers. 2006-01-26 Jason Merrill PR c++/16021 * name-lookup.c (parse_using_directive): Require strong using to name a nested namespace. 2006-01-25 Volker Reichelt Revert: * cp-tree.h (do_poplevel): Remove prototype. * semantics.c (do_poplevel): Add prototype. Make static. Revert: * cp-tree.h (default_conversion): Remove prototype. * typeck.c (default_conversion): Make static. 2006-01-25 Volker Reichelt * cp-tree.h (get_primary_binfo): Remove prototype. (push_using_decl): Likewise. (current_template_args): Likewise. (more_specialized_class): Likewise. (mark_class_instantiated): Likewise. (default_conversion): Likewise. (pfn_from_ptrmemfunc): Likewise. * class.c (get_primary_binfo): Add prototype, make static, simplify. * name-lookup.c (push_using_decl): Make static. * pt.c (current_template_args): Likewise. (more_specialized_class): Likewise. (mark_class_instantiated): Likewise. * typeck.c (default_conversion): Make static. (pfn_from_ptrmemfunc): Add prototype, make static. 2006-01-24 Dirk Mueller * typeck.c (build_binary_op): Use OPT_Wfloat_equal in warning(). 2006-01-24 Volker Reichelt PR c++/25552 * parser.c (cp_parser_unqualified_id): Check that destructor name and scope match. * call.c (check_dtor_name): Do not expect a BIT_NOT_EXPR. Adjust comment. Return early if possible. Use same_type_p to compare types. * typeck.c (lookup_destructor): Adjust call to check_dtor_name. 2006-01-24 Mark Mitchell * semantics.c: Remove outdated comment. 2006-01-23 Volker Reichelt * cp-tree.h (do_poplevel): Remove prototype. * semantics.c (do_poplevel): Add prototype. Make static. * cp-tree.h (original_type): Remove prototype. * typeck.c (original_type): Make static. * cp-tree.h (declare_global_var): Remove prototype. * decl.c (declare_global_var): Make static. * cp-tree.h (implicitly_declare_fn): Remove prototype. * method.c (implicitly_declare_fn): Make static. * cp-tree.h (fold_decl_constant_value): Remove prototype. * pt.c (fold_decl_constant_value): Make static. * cp-tree.h (build_x_delete): Remove prototype. * init.c (build_vec_delete_1): Call build_op_delete_call directly and not via build_x_delete. (build_x_delete): Remove. * cp-tree.h (get_vtt_name): Remove prototype. * class.c (get_vtt_name): Remove. (build_vtt): Call mangle_vtt_for_type instead of get_vtt_name. 2006-01-22 Gabriel Dos Reis * rtti.c (build_dynamic_cast): Fix comment. 2006-01-22 Gabriel Dos Reis PR c++/10891 * rtti.c (build_dynamic_cast): Reject dynamic_cast use if -fno-rtti. 2006-01-21 Mark Mitchell PR c++/25895 * class.c (build_base_path): Generate a NOP_EXPR instead of a COMPONENT_REF if the base and derived classes are at the same address. PR c++/25856 * decl.c (begin_destructor_body): Robustify. PR c++/25858 * parser.c (cp_parser_direct_declarator): Robustify. 2006-01-20 Volker Reichelt * parser.c (cp_lexer_next_token_is_keyword): Simplify. * parser.c (clear_decl_specs): Remove prototype. * parser.c (cp_parser_expression_fn): Remove. * call.c (add_builtin_candidates): Remove superfluous return. * name-lookup.c (do_toplevel_using_decl): Likewise. * parser.c (cp_parser_type_specifier_seq): Likewise. (cp_parser_save_default_args): Likewise. 2006-01-20 Dirk Mueller PR c++/5520 * semantics.c (finish_if_stmt): Call empty_body_warning. * parser.c (cp_parser_implicitly_scoped_statement): Mark empty statement with an empty stmt. 2006-01-19 Mark Mitchell PR c++/22136 * name-lookup.c (do_class_using_decl): Don't try to look up base classes in templates with dependent base types. 2006-01-19 Volker Reichelt PR c++/25854 * pt.c (maybe_process_partial_specialization): Return early on error_mark_node. 2006-01-19 Volker Reichelt PR c++/16829 * decl.c (start_preparsed_function): Check default arguments unconditionally. * name-lookup.c (pushdecl_maybe_friend): Check default arguments of all functions and function templates. * parser.c (cp_parser_late_parsing_default_args): Check default arguments. * decl2.c (check_default_args): Set missing default arguments to error_mark_node. 2006-01-18 Mark Mitchell PR c++/25836 * cp-tree.h (push_class_stack): New function. (pop_class_stack): Likewise. * class.c (class_stack_node): Add hidden field. (pushclass): Clear it. (push_class_stack): New function. (pop_class_stack): Likewise. (currently_open_class): Ignore hidden classes. (currently_open_derived_class): Likewise. * name-lookup.c (push_to_top_level): Call push_class_stack. (pop_from_top_level): Call pop_class_stack. 2006-01-18 Kazu Hirata * tree.c (find_tree_t, find_tree): Remove. * cp-tree.h: Remove the prototype for find_tree. 2006-01-18 Jakub Jelinek * search.c (lookup_conversions_r): Fix a pasto. 2006-01-17 Eric Christopher * call.c (convert_like_real): When issuing conversion warnings, depend on OPT_Wconversion. * cvt.c (build_expr_type_conversion): Ditto. 2006-01-17 Kazu Hirata * name-lookup.c (lookup_namespace_name): Remove. * name-lookup.h: Remove the prototype for lookup_namespace_name. 2006-01-17 Jakub Jelinek PR c/25682 * decl.c (compute_array_index_type): After issuing not an integral constant-expression error, set size to 1 to avoid ICEs later on. 2006-01-16 Ian Lance Taylor * parser.c: Include "cgraph.h". (cp_parser_asm_definition): Call cgraph_add_asm_node rather than assemble_asm. 2006-01-16 Rafael Ávila de Espíndola * g++spec.c (lang_specific_spec_functions): Remove. 2006-01-15 Gabriel Dos Reis * decl.c (check_initializer): Fix thinko. 2006-01-14 Mark Mitchell PR c++/25663 * parser.c (cp_parser_direct_declarator): Use cp_parser_error instead of error. 2006-01-13 Jason Merrill * pt.c (check_explicit_specialization): Use CP_DECL_CONTEXT even more. * name-lookup.c (set_decl_namespace): Use CP_DECL_CONTEXT. * pt.c (check_explicit_specialization): Likewise. 2006-01-12 Jason Merrill PR libstdc++/24660 * pt.c (check_explicit_specialization): Handle namespace association. * name-lookup.c (set_decl_namespace): Likewise. 2006-01-12 Nathan Sidwell PR c++/24824 * class.c (handle_using_decl): Pass correct scope to cp_emit_debug_info_for_using. 2006-01-11 Nathan Sidwell PR c++/25386 * tree.c (lvalue_p_1): Any part of a COMPONENT_REF affects packedness. 2006-01-06 Gabriel Dos Reis * parser.c (cp_parser_primary_expression): Document the grammar for the built-in offsetof, a GNU extension. 2006-01-04 Zdenek Dvorak PR c++/25632 * init.c (constant_value_1): Unshare use of DECL_INITIAL. Fix a typo in condition. 2006-01-04 Chris Lattner * typeck2.c: update copyright to 2006 (split_nonconstant_init_1): Set TREE_CONSTANT to true. 2006-01-04 Mark Mitchell PR c++/24782 * parser.c (cp_parser_nested_name_specifier_opt): Preserve access checks, even when parsing tentatively. 2006-01-04 Richard Henderson Merge from gomp branch. * lex.c (handle_pragma_java_exceptions): Fix whitespace. * parser.c (struct cp_token): Add pragma_kind. (eof_token): Update to match. (struct cp_lexer): Add in_pragma; rearrange next for better packing. (cp_parser_initial_pragma): New. (cp_lexer_new_main): Use it. Don't bother clearing c_lex_return_raw_strings. (cp_lexer_get_preprocessor_token): Always initialize keyword and pragma_kind fields. Handle CPP_PRAGMA. (cp_lexer_consume_token): Don't allow CPP_PRAGMA_EOL when in_pragma is set. (cp_lexer_handle_pragma): Remove. Update callers to cp_parser_pragma. (cp_lexer_print_token) : Don't print as a string. (cp_parser_skip_to_pragma_eol): New. (cp_parser_error): Use it. (cp_parser_skip_to_closing_parenthesis): Stop at CPP_PRAGMA_EOL; rearrange with switch statement. (cp_parser_skip_to_end_of_statement): Likewise. (cp_parser_skip_to_end_of_block_or_statement): Likewise. (cp_parser_skip_to_closing_brace): Likewise. (cp_parser_skip_until_found): Likewise. (cp_parser_statement): Add in_compound argument; update callers. Use it to decide how to handle pragma parsing. (cp_parser_labeled_statement): Add in_compound argument; pass it on to cp_parser_statement. (cp_parser_statement_seq_opt): Stop at CPP_PRAGMA_EOL. (cp_parser_declaration_seq_opt): Likewise. (cp_parser_parameter_declaration): Likewise. (cp_parser_member_specification_opt): Likewise. (cp_parser_function_definition_after_decl): Likewise. (cp_parser_cache_group): Handle CPP_PRAGMA/CPP_PRAGMA_EOL pairs. (cp_parser_pragma): New. (pragma_lex): New. 2006-01-04 Dirk Mueller * decl.c (finish_constructor_body): create simple compound stmt instead of a if(1) { } construct. 2006-01-03 Mark Mitchell PR c++/25492 * name-lookup.c (push_class_level_binding): When a derived class provides a type binding, eliminate any type binding from a base class. PR c++/25625 * repo.c (repo_emit_p): Always instantiate static data members initialized by constant expressions, so that there values are available. 2006-01-02 Mark Mitchell PR c++/25635 * class.c (add_method): Set TYPE_HAS_CONVERSION for classes with a conversion operator. * decl.c (grokdeclarator): Do not set TYPE_HAS_CONVERSION here. PR c++/25638 * class.c (add_method): Never associate more than one destructor with a single class. PR c++/25637 * cp-tree.h (do_friend): Adjust prototype. * decl.c (grokfndecl): Make funcdef_flag a bool, not an int. (grokdeclarator): Likewise. Refine check for invalid declarations/definitions of member functions outside of their own class. * friend.c (do_friend): Make funcdef_flag a bool, not an int. PR c++/25633 * parser.c (cp_parser_mem_initializer_list): Check result of cp_parser_mem_initializer against error_mark_node, not NULL_TREE. (cp_parser_mem_initializer): Return error_mark_node for failure. PR c++/25634 * parser.c (cp_parser_template_parameter_list): Call begin_template_parm_list and end_template_parm_list here. (cp_parser_type_parameter): Not here. (cp_parser_template_declaration_after_export): Or here. (cp_parser_elaborated_type_specifier): Call cp_parser_check_template_parameters. * tree.c (build_target_expr_with_type): Use force_target_expr. * decl2.c (mark_used): Fix typo in comment. 2006-01-02 Volker Reichelt * parser.c (cp_parser_using_declaration): Skip name-lookup on invalid scope. Copyright (C) 2006 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.