diff -Nrcpad gcc-4.5.2/gcc/cp/ChangeLog gcc-4.5.3/gcc/cp/ChangeLog *** gcc-4.5.2/gcc/cp/ChangeLog Thu Dec 16 12:33:06 2010 --- gcc-4.5.3/gcc/cp/ChangeLog Thu Apr 28 14:12:32 2011 *************** *** 1,3 **** --- 1,123 ---- + 2011-04-28 Release Manager + + * GCC 4.5.3 released. + + 2011-04-26 Dodji Seketeli + + PR c++/46824 + * call.c (add_builtin_candidate): The type of + the argument of the indirection operator should not be dependent. + Fix the comment. + + 2011-04-26 Jason Merrill + + PR c++/42687 + * parser.c (cp_parser_primary_expression): Set *idk to + CP_ID_KIND_NONE for a parenthesized identifier. + + 2011-04-20 Jason Merrill + + PR c++/48594 + * decl2.c (build_offset_ref_call_from_tree): Fix calling a functor + or pointer to (non-member) function. + + 2011-04-19 Jason Merrill + + PR c++/46304 + * typeck.c (cp_build_binary_op): Fold COMPLEX_EXPR. + + 2011-04-19 Jason Merrill + + PR c++/45267 + * decl.c (duplicate_decls): Keep always_inline attribute + in sync with DECL_DISREGARD_INLINE_LIMITS. + + 2011-04-18 Richard Guenther + + Backported from 4.6 branch + 2011-03-11 Jakub Jelinek + + PR c++/48035 + * init.c (build_zero_init_1): Extracted from build_zero_init. + Add FIELD_SIZE argument, if non-NULL and field bit_position + as not smaller than that, don't add that field's initializer. + Pass DECL_SIZE as last argument to build_zero_init_1 + for DECL_FIELD_IS_BASE fields. + (build_zero_init): Use build_zero_init_1. + + 2011-03-28 Jason Merrill + + Revert: + PR c++/48289 + * pt.c (build_non_dependent_expr): Keep dereferences outside the + NON_DEPENDENT_EXPR. + + 2011-03-25 Jason Merrill + + PR c++/48289 + * pt.c (build_non_dependent_expr): Keep dereferences outside the + NON_DEPENDENT_EXPR. + + 2011-03-11 Jason Merrill + + PR c++/47125 + * pt.c (tsubst) [TYPENAME_TYPE]: Only give errors if tf_error. + + 2011-03-10 Jason Merrill + + PR c++/48029 + * pt.c (iterative_hash_template_arg): Remove special case for + ARRAY_TYPE. + + 2011-03-09 Jason Merrill + + PR c++/44629 + * pt.c (unify): An unresolved overload is a nondeduced context. + + 2011-03-08 Jason Merrill + + PR c++/45651 + * pt.c (instantiate_decl): Don't clear DECL_INTERFACE_KNOWN on + !TREE_PUBLIC decls. + + 2011-03-08 Jason Merrill + + PR c++/47289 + * pt.c (coerce_template_parms): Fix error recovery. + + 2011-03-08 Dodji Seketeli + + PR c++/47705 + * pt.c (convert_nontype_argument): Only call decay_conversion on + arrays. + + 2011-03-08 Dodji Seketeli + + * name-lookup.c (binding_to_template_parms_of_scope_p): Only + consider scopes of primary template definitions. Adjust comments. + + 2011-03-08 Jason Merrill + + PR c++/47488 + * mangle.c (write_template_arg_literal) [STRING_CST]: Sorry. + + 2011-03-08 Richard Guenther + + PR tree-optimization/47278 + * decl.c (finish_function): Use decl_replaceable_p. + + 2011-03-01 Jason Merrill + + PR c++/46159 + * parser.c (cp_parser_primary_expression): Don't warn about a + failed tentative parse. + + 2011-02-26 Jason Merrill + + PR c++/47904 + * tree.c (cp_tree_equal) [PARM_DECL]: Don't crash on + DECL_ARTIFICIAL parms. + 2010-12-16 Release Manager * GCC 4.5.2 released. diff -Nrcpad gcc-4.5.2/gcc/cp/call.c gcc-4.5.3/gcc/cp/call.c *** gcc-4.5.2/gcc/cp/call.c Thu Jul 8 14:08:36 2010 --- gcc-4.5.3/gcc/cp/call.c Wed Apr 27 12:07:34 2011 *************** convert_class_to_reference (tree referen *** 1023,1029 **** if (!expr) return NULL; ! conversions = lookup_conversions (s, /*lookup_template_convs_p=*/true); if (!conversions) return NULL; --- 1023,1029 ---- if (!expr) return NULL; ! conversions = lookup_conversions (s); if (!conversions) return NULL; *************** add_builtin_candidate (struct z_candidat *** 1925,1931 **** } return; ! /* 7 For every cv-qualified or cv-unqualified complete object type T, there exist candidate operator functions of the form T& operator*(T*); --- 1925,1931 ---- } return; ! /* 7 For every cv-qualified or cv-unqualified object type T, there exist candidate operator functions of the form T& operator*(T*); *************** add_builtin_candidate (struct z_candidat *** 1936,1941 **** --- 1936,1942 ---- case INDIRECT_REF: if (TREE_CODE (type1) == POINTER_TYPE + && !uses_template_parms (TREE_TYPE (type1)) && (TYPE_PTROB_P (type1) || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)) break; *************** add_builtin_candidates (struct z_candida *** 2376,2383 **** if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR) return; ! convs = lookup_conversions (argtypes[i], ! /*lookup_template_convs_p=*/false); if (code == COND_EXPR) { --- 2377,2383 ---- if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR) return; ! convs = lookup_conversions (argtypes[i]); if (code == COND_EXPR) { *************** build_user_type_conversion_1 (tree totyp *** 2867,2874 **** reference to it)... */ } else ! conv_fns = lookup_conversions (fromtype, ! /*lookup_template_convs_p=*/true); } candidates = 0; --- 2867,2873 ---- reference to it)... */ } else ! conv_fns = lookup_conversions (fromtype); } candidates = 0; *************** build_op_call (tree obj, VEC(tree,gc) ** *** 3402,3408 **** } } ! convs = lookup_conversions (type, /*lookup_template_convs_p=*/true); for (; convs; convs = TREE_CHAIN (convs)) { --- 3401,3407 ---- } } ! convs = lookup_conversions (type); for (; convs; convs = TREE_CHAIN (convs)) { diff -Nrcpad gcc-4.5.2/gcc/cp/cp-tree.h gcc-4.5.3/gcc/cp/cp-tree.h *** gcc-4.5.2/gcc/cp/cp-tree.h Tue Apr 27 23:03:06 2010 --- gcc-4.5.3/gcc/cp/cp-tree.h Wed Apr 27 12:07:16 2011 *************** extern int at_function_scope_p (void); *** 5026,5032 **** extern bool at_class_scope_p (void); extern bool at_namespace_scope_p (void); extern tree context_for_name_lookup (tree); ! extern tree lookup_conversions (tree, bool); extern tree binfo_from_vbase (tree); extern tree binfo_for_vbase (tree, tree); extern tree look_for_overrides_here (tree, tree); --- 5026,5032 ---- extern bool at_class_scope_p (void); extern bool at_namespace_scope_p (void); extern tree context_for_name_lookup (tree); ! extern tree lookup_conversions (tree); extern tree binfo_from_vbase (tree); extern tree binfo_for_vbase (tree, tree); extern tree look_for_overrides_here (tree, tree); diff -Nrcpad gcc-4.5.2/gcc/cp/cvt.c gcc-4.5.3/gcc/cp/cvt.c *** gcc-4.5.2/gcc/cp/cvt.c Sat Feb 20 21:32:06 2010 --- gcc-4.5.3/gcc/cp/cvt.c Wed Apr 27 12:07:16 2011 *************** build_expr_type_conversion (int desires, *** 1199,1207 **** if (!TYPE_HAS_CONVERSION (basetype)) return NULL_TREE; ! for (conv = lookup_conversions (basetype, /*lookup_template_convs_p=*/true); ! conv; ! conv = TREE_CHAIN (conv)) { int win = 0; tree candidate; --- 1199,1205 ---- if (!TYPE_HAS_CONVERSION (basetype)) return NULL_TREE; ! for (conv = lookup_conversions (basetype); conv; conv = TREE_CHAIN (conv)) { int win = 0; tree candidate; diff -Nrcpad gcc-4.5.2/gcc/cp/decl.c gcc-4.5.3/gcc/cp/decl.c *** gcc-4.5.2/gcc/cp/decl.c Tue Dec 7 15:20:25 2010 --- gcc-4.5.3/gcc/cp/decl.c Wed Apr 20 00:06:19 2011 *************** duplicate_decls (tree newdecl, tree oldd *** 1975,1980 **** --- 1975,1993 ---- /* [temp.expl.spec/14] We don't inline explicit specialization just because the primary template says so. */ + + /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with + the always_inline attribute. */ + if (DECL_DISREGARD_INLINE_LIMITS (olddecl) + && !DECL_DISREGARD_INLINE_LIMITS (newdecl)) + { + if (DECL_DECLARED_INLINE_P (newdecl)) + DECL_DISREGARD_INLINE_LIMITS (newdecl) = true; + else + DECL_ATTRIBUTES (newdecl) + = remove_attribute ("always_inline", + DECL_ATTRIBUTES (newdecl)); + } } else if (new_defines_function && DECL_INITIAL (olddecl)) { *************** finish_function (int flags) *** 12502,12508 **** if (!processing_template_decl && !cp_function_chain->can_throw && !flag_non_call_exceptions ! && !DECL_REPLACEABLE_P (fndecl)) TREE_NOTHROW (fndecl) = 1; /* This must come after expand_function_end because cleanups might --- 12515,12521 ---- if (!processing_template_decl && !cp_function_chain->can_throw && !flag_non_call_exceptions ! && !decl_replaceable_p (fndecl)) TREE_NOTHROW (fndecl) = 1; /* This must come after expand_function_end because cleanups might diff -Nrcpad gcc-4.5.2/gcc/cp/decl2.c gcc-4.5.3/gcc/cp/decl2.c *** gcc-4.5.2/gcc/cp/decl2.c Tue Mar 23 22:29:53 2010 --- gcc-4.5.3/gcc/cp/decl2.c Thu Apr 21 02:56:39 2011 *************** build_offset_ref_call_from_tree (tree fn *** 3911,3919 **** because we depend on the form of FN. */ make_args_non_dependent (*args); object = build_non_dependent_expr (object); ! if (TREE_CODE (fn) == DOTSTAR_EXPR) ! object = cp_build_unary_op (ADDR_EXPR, object, 0, tf_warning_or_error); ! VEC_safe_insert (tree, gc, *args, 0, object); /* Now that the arguments are done, transform FN. */ fn = build_non_dependent_expr (fn); } --- 3911,3922 ---- because we depend on the form of FN. */ make_args_non_dependent (*args); object = build_non_dependent_expr (object); ! if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE) ! { ! if (TREE_CODE (fn) == DOTSTAR_EXPR) ! object = cp_build_unary_op (ADDR_EXPR, object, 0, tf_warning_or_error); ! VEC_safe_insert (tree, gc, *args, 0, object); ! } /* Now that the arguments are done, transform FN. */ fn = build_non_dependent_expr (fn); } *************** build_offset_ref_call_from_tree (tree fn *** 3933,3939 **** VEC_safe_insert (tree, gc, *args, 0, object_addr); } ! expr = cp_build_function_call_vec (fn, args, tf_warning_or_error); if (processing_template_decl && expr != error_mark_node) expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args); --- 3936,3945 ---- VEC_safe_insert (tree, gc, *args, 0, object_addr); } ! if (CLASS_TYPE_P (TREE_TYPE (fn))) ! expr = build_op_call (fn, args, tf_warning_or_error); ! else ! expr = cp_build_function_call_vec (fn, args, tf_warning_or_error); if (processing_template_decl && expr != error_mark_node) expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args); diff -Nrcpad gcc-4.5.2/gcc/cp/init.c gcc-4.5.3/gcc/cp/init.c *** gcc-4.5.2/gcc/cp/init.c Mon Aug 23 06:39:42 2010 --- gcc-4.5.3/gcc/cp/init.c Mon Apr 18 14:02:22 2011 *************** initialize_vtbl_ptrs (tree addr) *** 143,152 **** is the number of elements in the array. If STATIC_STORAGE_P is TRUE, initializers are only generated for entities for which zero-initialization does not simply mean filling the storage with ! zero bytes. */ ! tree ! build_zero_init (tree type, tree nelts, bool static_storage_p) { tree init = NULL_TREE; --- 143,155 ---- is the number of elements in the array. If STATIC_STORAGE_P is TRUE, initializers are only generated for entities for which zero-initialization does not simply mean filling the storage with ! zero bytes. FIELD_SIZE, if non-NULL, is the bit size of the field, ! subfields with bit positions at or above that bit size shouldn't ! be added. */ ! static tree ! build_zero_init_1 (tree type, tree nelts, bool static_storage_p, ! tree field_size) { tree init = NULL_TREE; *************** build_zero_init (tree type, tree nelts, *** 191,205 **** if (TREE_CODE (field) != FIELD_DECL) continue; /* Note that for class types there will be FIELD_DECLs corresponding to base classes as well. Thus, iterating over TYPE_FIELDs will result in correct initialization of all of the subobjects. */ if (!static_storage_p || !zero_init_p (TREE_TYPE (field))) { ! tree value = build_zero_init (TREE_TYPE (field), ! /*nelts=*/NULL_TREE, ! static_storage_p); if (value) CONSTRUCTOR_APPEND_ELT(v, field, value); } --- 194,225 ---- if (TREE_CODE (field) != FIELD_DECL) continue; + /* Don't add virtual bases for base classes if they are beyond + the size of the current field, that means it is present + somewhere else in the object. */ + if (field_size) + { + tree bitpos = bit_position (field); + if (TREE_CODE (bitpos) == INTEGER_CST + && !tree_int_cst_lt (bitpos, field_size)) + continue; + } + /* Note that for class types there will be FIELD_DECLs corresponding to base classes as well. Thus, iterating over TYPE_FIELDs will result in correct initialization of all of the subobjects. */ if (!static_storage_p || !zero_init_p (TREE_TYPE (field))) { ! tree new_field_size ! = (DECL_FIELD_IS_BASE (field) ! && DECL_SIZE (field) ! && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST) ! ? DECL_SIZE (field) : NULL_TREE; ! tree value = build_zero_init_1 (TREE_TYPE (field), ! /*nelts=*/NULL_TREE, ! static_storage_p, ! new_field_size); if (value) CONSTRUCTOR_APPEND_ELT(v, field, value); } *************** build_zero_init (tree type, tree nelts, *** 247,255 **** ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node, max_index); ! ce->value = build_zero_init (TREE_TYPE (type), ! /*nelts=*/NULL_TREE, ! static_storage_p); } /* Build a constructor to contain the initializations. */ --- 267,275 ---- ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node, max_index); ! ce->value = build_zero_init_1 (TREE_TYPE (type), ! /*nelts=*/NULL_TREE, ! static_storage_p, NULL_TREE); } /* Build a constructor to contain the initializations. */ *************** build_zero_init (tree type, tree nelts, *** 267,272 **** --- 287,310 ---- return init; } + /* Return an expression for the zero-initialization of an object with + type T. This expression will either be a constant (in the case + that T is a scalar), or a CONSTRUCTOR (in the case that T is an + aggregate), or NULL (in the case that T does not require + initialization). In either case, the value can be used as + DECL_INITIAL for a decl of the indicated TYPE; it is a valid static + initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS + is the number of elements in the array. If STATIC_STORAGE_P is + TRUE, initializers are only generated for entities for which + zero-initialization does not simply mean filling the storage with + zero bytes. */ + + tree + build_zero_init (tree type, tree nelts, bool static_storage_p) + { + return build_zero_init_1 (type, nelts, static_storage_p, NULL_TREE); + } + /* Return a suitable initializer for value-initializing an object of type TYPE, as described in [dcl.init]. */ diff -Nrcpad gcc-4.5.2/gcc/cp/mangle.c gcc-4.5.3/gcc/cp/mangle.c *** gcc-4.5.2/gcc/cp/mangle.c Tue Mar 23 22:29:53 2010 --- gcc-4.5.3/gcc/cp/mangle.c Tue Mar 8 17:40:27 2011 *************** write_template_arg_literal (const tree v *** 2683,2688 **** --- 2683,2692 ---- write_real_cst (value); break; + case STRING_CST: + sorry ("string literal in function template signature"); + break; + default: gcc_unreachable (); } diff -Nrcpad gcc-4.5.2/gcc/cp/name-lookup.c gcc-4.5.3/gcc/cp/name-lookup.c *** gcc-4.5.2/gcc/cp/name-lookup.c Tue Apr 27 23:03:06 2010 --- gcc-4.5.3/gcc/cp/name-lookup.c Tue Mar 8 21:14:18 2011 *************** qualified_lookup_using_namespace (tree n *** 4067,4074 **** } /* Subroutine of outer_binding. ! Returns TRUE if BINDING is a binding to a template parameter of SCOPE, ! FALSE otherwise. */ static bool binding_to_template_parms_of_scope_p (cxx_binding *binding, --- 4067,4079 ---- } /* Subroutine of outer_binding. ! ! Returns TRUE if BINDING is a binding to a template parameter of ! SCOPE. In that case SCOPE is the scope of a primary template ! parameter -- in the sense of G++, i.e, a template that has its own ! template header. ! ! Returns FALSE otherwise. */ static bool binding_to_template_parms_of_scope_p (cxx_binding *binding, *************** binding_to_template_parms_of_scope_p (cx *** 4084,4089 **** --- 4089,4096 ---- return (scope && scope->this_entity && get_template_info (scope->this_entity) + && PRIMARY_TEMPLATE_P (TI_TEMPLATE + (get_template_info (scope->this_entity))) && parameter_of_template_p (binding_value, TI_TEMPLATE (get_template_info \ (scope->this_entity)))); diff -Nrcpad gcc-4.5.2/gcc/cp/parser.c gcc-4.5.3/gcc/cp/parser.c *** gcc-4.5.2/gcc/cp/parser.c Mon Aug 30 19:33:31 2010 --- gcc-4.5.3/gcc/cp/parser.c Wed Apr 27 05:20:46 2011 *************** cp_parser_primary_expression (cp_parser *** 3325,3330 **** --- 3325,3336 ---- `&A::B' might be a pointer-to-member, but `&(A::B)' is not. */ finish_parenthesized_expr (expr); + /* DR 705: Wrapping an unqualified name in parentheses + suppresses arg-dependent lookup. We want to pass back + CP_ID_KIND_QUALIFIED for suppressing vtable lookup + (c++/37862), but none of the others. */ + if (*idk != CP_ID_KIND_QUALIFIED) + *idk = CP_ID_KIND_NONE; } /* The `>' token might be the end of a template-id or template-parameter-list now. */ *************** cp_parser_primary_expression (cp_parser *** 3341,3348 **** if (c_dialect_objc ()) /* We have an Objective-C++ message. */ return cp_parser_objc_expression (parser); ! maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR); ! return cp_parser_lambda_expression (parser); case CPP_OBJC_STRING: if (c_dialect_objc ()) --- 3347,3360 ---- if (c_dialect_objc ()) /* We have an Objective-C++ message. */ return cp_parser_objc_expression (parser); ! { ! tree lam = cp_parser_lambda_expression (parser); ! /* Don't warn about a failed tentative parse. */ ! if (cp_parser_error_occurred (parser)) ! return error_mark_node; ! maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR); ! return lam; ! } case CPP_OBJC_STRING: if (c_dialect_objc ()) diff -Nrcpad gcc-4.5.2/gcc/cp/pt.c gcc-4.5.3/gcc/cp/pt.c *** gcc-4.5.2/gcc/cp/pt.c Fri Jul 2 10:15:10 2010 --- gcc-4.5.3/gcc/cp/pt.c Mon Mar 28 15:06:28 2011 *************** iterative_hash_template_arg (tree arg, h *** 1556,1568 **** val = iterative_hash_object (code, val); return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val); - case ARRAY_TYPE: - /* layout_type sets structural equality for arrays of - incomplete type, so we can't rely on the canonical type - for hashing. */ - val = iterative_hash_template_arg (TREE_TYPE (arg), val); - return iterative_hash_template_arg (TYPE_DOMAIN (arg), val); - case LAMBDA_EXPR: /* A lambda can't appear in a template arg, but don't crash on erroneous input. */ --- 1556,1561 ---- *************** convert_nontype_argument (tree type, tre *** 4951,4957 **** /* Add the ADDR_EXPR now for the benefit of value_dependent_expression_p. */ ! if (TYPE_PTROBV_P (type)) expr = decay_conversion (expr); /* If we are in a template, EXPR may be non-dependent, but still --- 4944,4951 ---- /* Add the ADDR_EXPR now for the benefit of value_dependent_expression_p. */ ! if (TYPE_PTROBV_P (type) ! && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE) expr = decay_conversion (expr); /* If we are in a template, EXPR may be non-dependent, but still *************** coerce_template_parms (tree parms, *** 6043,6049 **** sorry ("cannot expand %<%T%> into a fixed-length " "argument list", arg); } ! return error_mark_node; } } else if (require_all_args) --- 6037,6043 ---- sorry ("cannot expand %<%T%> into a fixed-length " "argument list", arg); } ! ++lost; } } else if (require_all_args) *************** coerce_template_parms (tree parms, *** 6071,6077 **** reported) that we are trying to recover from, e.g., a class template with a parameter list such as template. */ ! return error_mark_node; else arg = convert_template_argument (TREE_VALUE (parm), arg, new_args, complain, --- 6065,6071 ---- reported) that we are trying to recover from, e.g., a class template with a parameter list such as template. */ ! ++lost; else arg = convert_template_argument (TREE_VALUE (parm), arg, new_args, complain, *************** tsubst (tree t, tree args, tsubst_flags_ *** 10555,10565 **** if (TREE_CODE (f) != TYPENAME_TYPE) { if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE) ! error ("%qT resolves to %qT, which is not an enumeration type", ! t, f); else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f)) ! error ("%qT resolves to %qT, which is is not a class type", ! t, f); } /* cv-quals from the template are discarded when --- 10549,10569 ---- if (TREE_CODE (f) != TYPENAME_TYPE) { if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE) ! { ! if (complain & tf_error) ! error ("%qT resolves to %qT, which is not an enumeration type", ! t, f); ! else ! return error_mark_node; ! } else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f)) ! { ! if (complain & tf_error) ! error ("%qT resolves to %qT, which is is not a class type", ! t, f); ! else ! return error_mark_node; ! } } /* cv-quals from the template are discarded when *************** unify (tree tparms, tree targs, tree par *** 15193,15198 **** --- 15197,15205 ---- return 1; default: + /* An unresolved overload is a nondeduced context. */ + if (type_unknown_p (parm)) + return 0; gcc_assert (EXPR_P (parm)); /* We must be looking at an expression. This can happen with *************** instantiate_decl (tree d, int defer_ok, *** 16720,16727 **** if (!pattern_defined && expl_inst_class_mem_p && DECL_EXPLICIT_INSTANTIATION (d)) { ! DECL_NOT_REALLY_EXTERN (d) = 0; ! DECL_INTERFACE_KNOWN (d) = 0; SET_DECL_IMPLICIT_INSTANTIATION (d); } --- 16727,16739 ---- if (!pattern_defined && expl_inst_class_mem_p && DECL_EXPLICIT_INSTANTIATION (d)) { ! /* Leave linkage flags alone on instantiations with anonymous ! visibility. */ ! if (TREE_PUBLIC (d)) ! { ! DECL_NOT_REALLY_EXTERN (d) = 0; ! DECL_INTERFACE_KNOWN (d) = 0; ! } SET_DECL_IMPLICIT_INSTANTIATION (d); } diff -Nrcpad gcc-4.5.2/gcc/cp/search.c gcc-4.5.3/gcc/cp/search.c *** gcc-4.5.2/gcc/cp/search.c Wed Feb 10 07:37:37 2010 --- gcc-4.5.3/gcc/cp/search.c Wed Apr 27 12:07:16 2011 *************** lookup_conversions_r (tree binfo, *** 2420,2432 **** functions in this node were selected. This function is effectively performing a set of member lookups as lookup_fnfield does, but using the type being converted to as the unique key, rather than the ! field name. ! If LOOKUP_TEMPLATE_CONVS_P is TRUE, the returned TREE_LIST contains ! the non-hidden user-defined template conversion functions too. */ tree ! lookup_conversions (tree type, ! bool lookup_template_convs_p) { tree convs, tpl_convs; tree list = NULL_TREE; --- 2420,2429 ---- functions in this node were selected. This function is effectively performing a set of member lookups as lookup_fnfield does, but using the type being converted to as the unique key, rather than the ! field name. */ tree ! lookup_conversions (tree type) { tree convs, tpl_convs; tree list = NULL_TREE; *************** lookup_conversions (tree type, *** 2453,2461 **** } } - if (lookup_template_convs_p == false) - tpl_convs = NULL_TREE; - for (; tpl_convs; tpl_convs = TREE_CHAIN (tpl_convs)) { tree probe, next; --- 2450,2455 ---- diff -Nrcpad gcc-4.5.2/gcc/cp/tree.c gcc-4.5.3/gcc/cp/tree.c *** gcc-4.5.2/gcc/cp/tree.c Fri Dec 3 18:44:04 2010 --- gcc-4.5.3/gcc/cp/tree.c Sun Feb 27 17:11:19 2011 *************** cp_tree_equal (tree t1, tree t2) *** 2089,2100 **** case PARM_DECL: /* For comparing uses of parameters in late-specified return types ! with an out-of-class definition of the function. */ ! if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)) ! && DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2)) ! return true; ! else ! return false; case VAR_DECL: case CONST_DECL: --- 2089,2106 ---- case PARM_DECL: /* For comparing uses of parameters in late-specified return types ! with an out-of-class definition of the function, but can also come ! up for expressions that involve 'this' in a member function ! template. */ ! if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) ! { ! if (DECL_ARTIFICIAL (t1) ^ DECL_ARTIFICIAL (t2)) ! return false; ! if (DECL_ARTIFICIAL (t1) ! || DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2)) ! return true; ! } ! return false; case VAR_DECL: case CONST_DECL: diff -Nrcpad gcc-4.5.2/gcc/cp/typeck.c gcc-4.5.3/gcc/cp/typeck.c *** gcc-4.5.2/gcc/cp/typeck.c Mon Sep 6 18:49:46 2010 --- gcc-4.5.3/gcc/cp/typeck.c Wed Apr 20 06:31:07 2011 *************** cp_build_binary_op (location_t location, *** 4328,4334 **** gcc_unreachable(); } } ! return build2 (COMPLEX_EXPR, result_type, real, imag); } /* For certain operations (which identify themselves by shorten != 0) --- 4328,4338 ---- gcc_unreachable(); } } ! real = fold_if_not_in_template (real); ! imag = fold_if_not_in_template (imag); ! result = build2 (COMPLEX_EXPR, result_type, real, imag); ! result = fold_if_not_in_template (result); ! return result; } /* For certain operations (which identify themselves by shorten != 0) diff -Nrcpad gcc-4.5.2/libstdc++-v3/ChangeLog gcc-4.5.3/libstdc++-v3/ChangeLog *** gcc-4.5.2/libstdc++-v3/ChangeLog Thu Dec 16 12:30:22 2010 --- gcc-4.5.3/libstdc++-v3/ChangeLog Thu Apr 28 14:09:18 2011 *************** *** 1,3 **** --- 1,100 ---- + 2011-04-28 Release Manager + + * GCC 4.5.3 released. + + 2011-03-21 Rainer Orth + + * testsuite/22_locale/num_put/put/char/14220.cc: Don't xfail on + sparc*-sun-solaris2.10 && lp64. + + 2011-03-14 Andrey Zholos + + PR libstdc++/48114 + * include/bits/random.tcc (binomial_distribution<>::operator()): + Fix thinko in computation, __param.p() is a double. + + 2011-02-25 Johannes Singler + + PR libstdc++/47433 + * include/parallel/losertree.h + (_LoserTree<>::__delete_min_insert): + Do not qualify swap with std:: for value type, + but include a using directive instead. + (_LoserTreeUnguarded<>::__delete_min_insert): Likewise. + * include/parallel/balanced_quicksort.h (__qsb_divide): + Use std::iter_swap instead of std::swap. + (__qsb_local_sort_with_helping): Likewise. + * include/parallel/partition.h (__parallel_partition): + Likewise. (__parallel_nth_element): Likewise. + + 2011-02-25 Johannes Singler + + * include/parallel/numeric (inner_product, partial_sum): + Qualify subsequent call with __gnu_parallel instead of + _GLIBCXX_STD_P to reenable parallel execution without ambiguity. + * include/parallel/algobase.h (equal): Likewise. + * include/parallel/algo.h (find_first_of, search_n, merge, + nth_element, partial_sort, max_element, min_element): Likewise. + * testsuite/25_algorithms/headers/algorithm/ + parallel_algorithm_mixed1.cc (main): Add respective test cases. + * testsuite/25_algorithms/headers/algorithm/ + parallel_algorithm_mixed2.cc (main): Likewise. + * testsuite/26_numerics/headers/numeric/ + parallel_numeric_mixed1.cc (main): Likewise. + * testsuite/26_numerics/headers/numeric/ + parallel_numeric_mixed2.cc (main): Likewise. + + 2011-02-13 Gerald Pfeifer + + * doc/xml/faq.xml: Adjust link to bug database. + Remove old item on broken header files. + + 2011-02-12 Paolo Carlini + + PR libstdc++/47709 + * include/ext/algorithm (is_heap): In C++0x mode import from + namespace std. + * testsuite/ext/is_heap/47709.cc: New. + + 2011-02-08 Jonathan Wakely + + * doc/xml/gnu/gpl-2.0.xml: Remove. + * doc/Makefile.am: Update. + * doc/Makefile.in: Regenerate. + + 2011-02-06 Gerald Pfeifer + + * doc/xml/manual/debug.xml: Use GDB instead of gdb. + Adjust link to GDB manual. + + 2011-02-01 Paolo Carlini + + PR libstdc++/46914 + * include/bits/atomic_0.h (_ATOMIC_STORE_, _ATOMIC_MODIFY_, + _ATOMIC_CMPEXCHNG_): Rename __v -> __w, and __m -> __n, to + avoid name conflicts. + + 2011-01-30 Gerald Pfeifer + + * doc/xml/manual/codecvt.xml: Fix link to The Austin Common + Standards Revision Group. + * doc/xml/manual/locale.xml: Ditto. + * doc/xml/manual/messages.xml: Ditto. + * doc/xml/manual/using_exceptions.xml: Ditto. + + 2011-01-19 Graham Reed + + PR libstdc++/47354 + * src/bitmap_allocator.cc (free_list::_M_get): Lock mutex. + + 2010-12-17 Rainer Orth + + Backport from mainline: + 2010-12-10 Rainer Orth + + * testsuite/lib/libstdc++.exp (v3-build_support): Delete + libtestc++.a before creation. + 2010-12-16 Release Manager * GCC 4.5.2 released. diff -Nrcpad gcc-4.5.2/libstdc++-v3/doc/Makefile.am gcc-4.5.3/libstdc++-v3/doc/Makefile.am *** gcc-4.5.2/libstdc++-v3/doc/Makefile.am Fri Aug 27 18:25:00 2010 --- gcc-4.5.3/libstdc++-v3/doc/Makefile.am Tue Feb 8 20:39:29 2011 *************** xml_sources_manual = \ *** 204,210 **** xml_sources_extra = \ ${xml_dir}/gnu/fdl-1.2.xml \ - ${xml_dir}/gnu/gpl-2.0.xml \ ${xml_dir}/gnu/gpl-3.0.xml xml_sources = \ --- 204,209 ---- diff -Nrcpad gcc-4.5.2/libstdc++-v3/doc/Makefile.in gcc-4.5.3/libstdc++-v3/doc/Makefile.in *** gcc-4.5.2/libstdc++-v3/doc/Makefile.in Fri Aug 27 18:25:00 2010 --- gcc-4.5.3/libstdc++-v3/doc/Makefile.in Tue Feb 8 20:39:29 2011 *************** xml_sources_manual = \ *** 343,349 **** xml_sources_extra = \ ${xml_dir}/gnu/fdl-1.2.xml \ - ${xml_dir}/gnu/gpl-2.0.xml \ ${xml_dir}/gnu/gpl-3.0.xml xml_sources = \ --- 343,348 ---- diff -Nrcpad gcc-4.5.2/libstdc++-v3/doc/xml/faq.xml gcc-4.5.3/libstdc++-v3/doc/xml/faq.xml *** gcc-4.5.2/libstdc++-v3/doc/xml/faq.xml Thu Feb 25 01:22:57 2010 --- gcc-4.5.3/libstdc++-v3/doc/xml/faq.xml Sun Feb 13 23:10:40 2011 *************** *** 745,751 **** Before reporting a bug, please examine the ! bugs database with the category set to g++. --- 745,751 ---- Before reporting a bug, please examine the ! bugs database with the category set to g++. *************** *** 848,864 **** ! If you have found an extremely broken header file which is ! causing problems for you, look carefully before submitting a ! "high" priority bug report (which you probably ! shouldn't do anyhow; see the last paragraph of the page ! describing the GCC ! bug database). ! ! ! If the headers are in ${prefix}/include/g++-3, or ! if the installed library's name looks like ! libstdc++-2.10.a or libstdc++-libc6-2.10.so, then you are using the old libstdc++-v2 library, which is nonstandard and unmaintained. Do not report problems with -v2 to the -v3 --- 848,856 ---- ! If you are using headers in ! ${prefix}/include/g++-3, or if the installed ! library's name looks like libstdc++-2.10.a or libstdc++-libc6-2.10.so, then you are using the old libstdc++-v2 library, which is nonstandard and unmaintained. Do not report problems with -v2 to the -v3 diff -Nrcpad gcc-4.5.2/libstdc++-v3/doc/xml/gnu/gpl-2.0.xml gcc-4.5.3/libstdc++-v3/doc/xml/gnu/gpl-2.0.xml *** gcc-4.5.2/libstdc++-v3/doc/xml/gnu/gpl-2.0.xml Mon Feb 11 00:01:33 2008 --- gcc-4.5.3/libstdc++-v3/doc/xml/gnu/gpl-2.0.xml Thu Jan 1 00:00:00 1970 *************** *** 1,366 **** - - - - - GNU General Public License - Version 2, June 1991 - - 1989, 1991 - Free Software Foundation, Inc. - - - -
Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301 - USA -
-
- Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. -
- Version 2, June 1991 -
- GNU General Public License -
- Preamble - The licenses for most software are designed to take away your - freedom to share and change it. By contrast, the GNU General Public License is - intended to guarantee your freedom to share and change - free software - to make sure the software is free for all its users. - This General Public License applies to most of the Free Software - Foundation's software and to any other program whose authors commit - to using it. (Some other Free Software Foundation software is covered - by the GNU Library General Public License instead.) You can apply it - to your programs, too. - - When we speak of free software, we are referring to freedom, not price. - Our General Public Licenses are designed to make sure that you have the - freedom to distribute copies of free software (and charge for this - service if you wish), that you receive source code or can get it if you - want it, that you can change the software or use pieces of it in new free - programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid anyone - to deny you these rights or to ask you to surrender the rights. These - restrictions translate to certain responsibilities for you if you distribute - copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether gratis or - for a fee, you must give the recipients all the rights that you have. You - must make sure that they, too, receive or can get the source code. And you - must show them these terms so they know their rights. - - We protect your rights with two steps: - - - copyright the software, and - - - offer you this license which gives you legal permission to copy, - distribute and/or modify the software. - - - - - Also, for each author's protection and ours, we want to make certain that - everyone understands that there is no warranty for this free software. If - the software is modified by someone else and passed on, we want its - recipients to know that what they have is not the original, so that any - problems introduced by others will not reflect on the original authors' - reputations. - - Finally, any free program is threatened constantly by software patents. - We wish to avoid the danger that redistributors of a free program will - individually obtain patent licenses, in effect making the program - proprietary. To prevent this, we have made it clear that any patent must be - licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and modification - follow. -
-
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -
- Section 0 - This License applies to any program or other work which contains a notice - placed by the copyright holder saying it may be distributed under the terms - of this General Public License. The Program, below, refers to any such - program or work, and a - work based on the Program means either - the Program or any derivative work under copyright law: that is to say, a - work containing the Program or a portion of it, either verbatim or with - modifications and/or translated into another language. (Hereinafter, translation - is included without limitation in the term - modification.) Each licensee is addressed as you. - - Activities other than copying, distribution and modification are not covered by - this License; they are outside its scope. The act of running the Program is not - restricted, and the output from the Program is covered only if its contents - constitute a work based on the Program (independent of having been made by running - the Program). Whether that is true depends on what the Program does. -
-
- Section 1 - You may copy and distribute verbatim copies of the Program's source code as you - receive it, in any medium, provided that you conspicuously and appropriately - publish on each copy an appropriate copyright notice and disclaimer of warranty; - keep intact all the notices that refer to this License and to the absence of any - warranty; and give any other recipients of the Program a copy of this License - along with the Program. - - You may charge a fee for the physical act of transferring a copy, and you may at - your option offer warranty protection in exchange for a fee. -
-
- Section 2 - You may modify your copy or copies of the Program or any portion of it, thus - forming a work based on the Program, and copy and distribute such modifications - or work under the terms of - Section 1 above, provided - that you also meet all of these conditions: - - - You must cause the modified files to carry prominent notices stating that - you changed the files and the date of any change. - - - You must cause any work that you distribute or publish, that in whole or - in part contains or is derived from the Program or any part thereof, to be - licensed as a whole at no charge to all third parties under the terms of - this License. - - - If the modified program normally reads commands interactively when run, you - must cause it, when started running for such interactive use in the most - ordinary way, to print or display an announcement including an appropriate - copyright notice and a notice that there is no warranty (or else, saying - that you provide a warranty) and that users may redistribute the program - under these conditions, and telling the user how to view a copy of this - License. (Exception: If the Program itself is interactive but does not - normally print such an announcement, your work based on the Program is not - required to print an announcement.) - - - - - These requirements apply to the modified work as a whole. If identifiable sections - of that work are not derived from the Program, and can be reasonably considered - independent and separate works in themselves, then this License, and its terms, - do not apply to those sections when you distribute them as separate works. But when - you distribute the same sections as part of a whole which is a work based on the - Program, the distribution of the whole must be on the terms of this License, whose - permissions for other licensees extend to the entire whole, and thus to each and - every part regardless of who wrote it. - - Thus, it is not the intent of this section to claim rights or contest your rights - to work written entirely by you; rather, the intent is to exercise the right to control - the distribution of derivative or collective works based on the Program. - - In addition, mere aggregation of another work not based on the Program with the Program - (or with a work based on the Program) on a volume of a storage or distribution medium - does not bring the other work under the scope of this License. -
-
- Section 3 - You may copy and distribute the Program (or a work based on it, under - Section 2 in object code or executable form under the terms of - Sections 1 and - 2 above provided that you also do one of the following: - - - Accompany it with the complete corresponding machine-readable source code, which - must be distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - - Accompany it with a written offer, valid for at least three years, to give any - third party, for a charge no more than your cost of physically performing source - distribution, a complete machine-readable copy of the corresponding source code, - to be distributed under the terms of Sections 1 and 2 above on a medium customarily - used for software interchange; or, - - - Accompany it with the information you received as to the offer to distribute - corresponding source code. (This alternative is allowed only for noncommercial - distribution and only if you received the program in object code or executable form - with such an offer, in accord with Subsection b above.) - - - - - The source code for a work means the preferred form of the work for making modifications - to it. For an executable work, complete source code means all the source code for all modules - it contains, plus any associated interface definition files, plus the scripts used to control - compilation and installation of the executable. However, as a special exception, the source - code distributed need not include anything that is normally distributed (in either source or - binary form) with the major components (compiler, kernel, and so on) of the operating system - on which the executable runs, unless that component itself accompanies the executable. - - If distribution of executable or object code is made by offering access to copy from a - designated place, then offering equivalent access to copy the source code from the same place - counts as distribution of the source code, even though third parties are not compelled to - copy the source along with the object code. -
-
- Section 4 - You may not copy, modify, sublicense, or distribute the Program except as expressly provided - under this License. Any attempt otherwise to copy, modify, sublicense or distribute the - Program is void, and will automatically terminate your rights under this License. However, - parties who have received copies, or rights, from you under this License will not have their - licenses terminated so long as such parties remain in full compliance. -
-
- Section 5 - You are not required to accept this License, since you have not signed it. However, nothing - else grants you permission to modify or distribute the Program or its derivative works. - These actions are prohibited by law if you do not accept this License. Therefore, by modifying - or distributing the Program (or any work based on the Program), you indicate your acceptance - of this License to do so, and all its terms and conditions for copying, distributing or - modifying the Program or works based on it. -
-
- Section 6 - Each time you redistribute the Program (or any work based on the Program), the recipient - automatically receives a license from the original licensor to copy, distribute or modify - the Program subject to these terms and conditions. You may not impose any further restrictions - on the recipients' exercise of the rights granted herein. You are not responsible for enforcing - compliance by third parties to this License. -
-
- Section 7 - If, as a consequence of a court judgment or allegation of patent infringement or for any other - reason (not limited to patent issues), conditions are imposed on you (whether by court order, - agreement or otherwise) that contradict the conditions of this License, they do not excuse you - from the conditions of this License. If you cannot distribute so as to satisfy simultaneously - your obligations under this License and any other pertinent obligations, then as a consequence - you may not distribute the Program at all. For example, if a patent license would not permit - royalty-free redistribution of the Program by all those who receive copies directly or - indirectly through you, then the only way you could satisfy both it and this License would be - to refrain entirely from distribution of the Program. - - If any portion of this section is held invalid or unenforceable under any particular circumstance, - the balance of the section is intended to apply and the section as a whole is intended to apply - in other circumstances. - - It is not the purpose of this section to induce you to infringe any patents or other property - right claims or to contest validity of any such claims; this section has the sole purpose of - protecting the integrity of the free software distribution system, which is implemented by public - license practices. Many people have made generous contributions to the wide range of software - distributed through that system in reliance on consistent application of that system; it is up - to the author/donor to decide if he or she is willing to distribute software through any other - system and a licensee cannot impose that choice. - - This section is intended to make thoroughly clear what is believed to be a consequence of the - rest of this License. -
-
- Section 8 - If the distribution and/or use of the Program is restricted in certain countries either by patents - or by copyrighted interfaces, the original copyright holder who places the Program under this License - may add an explicit geographical distribution limitation excluding those countries, so that - distribution is permitted only in or among countries not thus excluded. In such case, this License - incorporates the limitation as if written in the body of this License. -
-
- Section 9 - The Free Software Foundation may publish revised and/or new versions of the General Public License - from time to time. Such new versions will be similar in spirit to the present version, but may differ - in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the Program specifies a version number of - this License which applies to it and any later version, you have the option of following the terms - and conditions either of that version or of any later version published by the Free Software - Foundation. If the Program does not specify a version number of this License, you may choose any - version ever published by the Free Software Foundation. -
-
- Section 10 - If you wish to incorporate parts of the Program into other free programs whose distribution - conditions are different, write to the author to ask for permission. For software which is copyrighted - by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions - for this. Our decision will be guided by the two goals of preserving the free status of all - derivatives of our free software and of promoting the sharing and reuse of software generally. -
-
- NO WARRANTY Section 11 - BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT - PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR - OTHER PARTIES PROVIDE THE PROGRAM AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE - PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -
-
- Section 12 - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR - ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU - FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE - USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED - INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH - ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH - DAMAGES. - - END OF TERMS AND CONDITIONS -
-
-
- How to Apply These Terms to Your New Programs - If you develop a new program, and you want it to be of the greatest - possible use to the public, the best way to achieve this is to make it - free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest - to attach them to the start of each source file to most effectively - convey the exclusion of warranty; and each file should have at least - the copyright line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - Also add information on how to contact you by electronic and paper mail. - - If the program is interactive, make it output a short notice like this - when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type show w. - This is free software, and you are welcome to redistribute it - under certain conditions; type show c for details. - - The hypothetical commands show w and show c should - show the appropriate parts of the General Public License. Of course, the commands you - use may be called something other than show w and show c; - they could even be mouse-clicks or menu items--whatever suits your program. - - You should also get your employer (if you work as a programmer) or your - school, if any, to sign a copyright disclaimer for the program, if - necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - Gnomovision (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - - This General Public License does not permit incorporating your program into - proprietary programs. If your program is a subroutine library, you may - consider it more useful to permit linking proprietary applications with the - library. If this is what you want to do, use the GNU Library General - Public License instead of this License. -
-
--- 0 ---- diff -Nrcpad gcc-4.5.2/libstdc++-v3/doc/xml/manual/codecvt.xml gcc-4.5.3/libstdc++-v3/doc/xml/manual/codecvt.xml *** gcc-4.5.2/libstdc++-v3/doc/xml/manual/codecvt.xml Thu Feb 25 01:22:57 2010 --- gcc-4.5.3/libstdc++-v3/doc/xml/manual/codecvt.xml Sun Jan 30 12:33:35 2011 *************** codecvt usage. *** 595,601 **** ! System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) --- 595,601 ---- ! System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) diff -Nrcpad gcc-4.5.2/libstdc++-v3/doc/xml/manual/debug.xml gcc-4.5.3/libstdc++-v3/doc/xml/manual/debug.xml *** gcc-4.5.2/libstdc++-v3/doc/xml/manual/debug.xml Thu Feb 25 01:22:57 2010 --- gcc-4.5.3/libstdc++-v3/doc/xml/manual/debug.xml Sun Feb 6 21:08:58 2011 *************** *** 45,51 **** communicate information about source constructs can be changed via -gdwarf-2 or -gstabs flags: some debugging formats permit more expressive type and scope information to be ! shown in gdb. Expressiveness can be enhanced by flags like -g3. The default debug information for a particular platform can be identified via the value set by the PREFERRED_DEBUGGING_TYPE macro in the gcc sources. --- 45,51 ---- communicate information about source constructs can be changed via -gdwarf-2 or -gstabs flags: some debugging formats permit more expressive type and scope information to be ! shown in GDB. Expressiveness can be enhanced by flags like -g3. The default debug information for a particular platform can be identified via the value set by the PREFERRED_DEBUGGING_TYPE macro in the gcc sources. *************** *** 197,210 ****
! Many options are available for gdb itself: please see ! "GDB features for C++" in the gdb documentation. Also recommended: the other parts of this manual. ! These settings can either be switched on in at the gdb command line, or put into a .gdbint file to establish default debugging characteristics, like so: --- 197,210 ----
! Many options are available for GDB itself: please see ! "GDB features for C++" in the GDB documentation. Also recommended: the other parts of this manual. ! These settings can either be switched on in at the GDB command line, or put into a .gdbint file to establish default debugging characteristics, like so: diff -Nrcpad gcc-4.5.2/libstdc++-v3/doc/xml/manual/locale.xml gcc-4.5.3/libstdc++-v3/doc/xml/manual/locale.xml *** gcc-4.5.2/libstdc++-v3/doc/xml/manual/locale.xml Thu Feb 25 01:22:57 2010 --- gcc-4.5.3/libstdc++-v3/doc/xml/manual/locale.xml Sun Jan 30 12:33:35 2011 *************** global locale" (emphasis Paolo), that is *** 571,577 **** ! System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) --- 571,577 ---- ! System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) diff -Nrcpad gcc-4.5.2/libstdc++-v3/doc/xml/manual/messages.xml gcc-4.5.3/libstdc++-v3/doc/xml/manual/messages.xml *** gcc-4.5.2/libstdc++-v3/doc/xml/manual/messages.xml Thu Feb 25 01:22:57 2010 --- gcc-4.5.3/libstdc++-v3/doc/xml/manual/messages.xml Sun Jan 30 12:33:35 2011 *************** void test01() *** 498,504 **** ! System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) --- 498,504 ---- ! System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) diff -Nrcpad gcc-4.5.2/libstdc++-v3/doc/xml/manual/using_exceptions.xml gcc-4.5.3/libstdc++-v3/doc/xml/manual/using_exceptions.xml *** gcc-4.5.2/libstdc++-v3/doc/xml/manual/using_exceptions.xml Mon Feb 22 22:52:11 2010 --- gcc-4.5.3/libstdc++-v3/doc/xml/manual/using_exceptions.xml Sun Jan 30 12:33:35 2011 *************** is called. *** 440,446 **** ! System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) --- 440,446 ---- ! System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) diff -Nrcpad gcc-4.5.2/libstdc++-v3/include/bits/atomic_0.h gcc-4.5.3/libstdc++-v3/include/bits/atomic_0.h *** gcc-4.5.2/libstdc++-v3/include/bits/atomic_0.h Mon Dec 21 19:00:34 2009 --- gcc-4.5.3/libstdc++-v3/include/bits/atomic_0.h Tue Feb 1 18:15:56 2011 *************** *** 1,6 **** // -*- C++ -*- header. ! // Copyright (C) 2008, 2009 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free --- 1,6 ---- // -*- C++ -*- header. ! // Copyright (C) 2008, 2009, 2010, 2011 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free *************** namespace __atomic0 *** 49,82 **** atomic_flag_clear_explicit(__g, __x); \ __r; }) ! #define _ATOMIC_STORE_(__a, __m, __x) \ ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_; \ ! __typeof__(__m) __v = (__m); \ __atomic_flag_base* __g = __atomic_flag_for_address(__p); \ __atomic_flag_wait_explicit(__g, __x); \ ! *__p = __v; \ atomic_flag_clear_explicit(__g, __x); \ ! __v; }) ! #define _ATOMIC_MODIFY_(__a, __o, __m, __x) \ ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_; \ ! __typeof__(__m) __v = (__m); \ __atomic_flag_base* __g = __atomic_flag_for_address(__p); \ __atomic_flag_wait_explicit(__g, __x); \ __typeof__ _ATOMIC_MEMBER_ __r = *__p; \ ! *__p __o __v; \ atomic_flag_clear_explicit(__g, __x); \ __r; }) ! #define _ATOMIC_CMPEXCHNG_(__a, __e, __m, __x) \ ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_; \ __typeof__(__e) __q = (__e); \ ! __typeof__(__m) __v = (__m); \ bool __r; \ __atomic_flag_base* __g = __atomic_flag_for_address(__p); \ __atomic_flag_wait_explicit(__g, __x); \ __typeof__ _ATOMIC_MEMBER_ __t__ = *__p; \ ! if (__t__ == *__q) { *__p = __v; __r = true; } \ else { *__q = __t__; __r = false; } \ atomic_flag_clear_explicit(__g, __x); \ __r; }) --- 49,82 ---- atomic_flag_clear_explicit(__g, __x); \ __r; }) ! #define _ATOMIC_STORE_(__a, __n, __x) \ ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_; \ ! __typeof__(__n) __w = (__n); \ __atomic_flag_base* __g = __atomic_flag_for_address(__p); \ __atomic_flag_wait_explicit(__g, __x); \ ! *__p = __w; \ atomic_flag_clear_explicit(__g, __x); \ ! __w; }) ! #define _ATOMIC_MODIFY_(__a, __o, __n, __x) \ ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_; \ ! __typeof__(__n) __w = (__n); \ __atomic_flag_base* __g = __atomic_flag_for_address(__p); \ __atomic_flag_wait_explicit(__g, __x); \ __typeof__ _ATOMIC_MEMBER_ __r = *__p; \ ! *__p __o __w; \ atomic_flag_clear_explicit(__g, __x); \ __r; }) ! #define _ATOMIC_CMPEXCHNG_(__a, __e, __n, __x) \ ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_; \ __typeof__(__e) __q = (__e); \ ! __typeof__(__n) __w = (__n); \ bool __r; \ __atomic_flag_base* __g = __atomic_flag_for_address(__p); \ __atomic_flag_wait_explicit(__g, __x); \ __typeof__ _ATOMIC_MEMBER_ __t__ = *__p; \ ! if (__t__ == *__q) { *__p = __w; __r = true; } \ else { *__q = __t__; __r = false; } \ atomic_flag_clear_explicit(__g, __x); \ __r; }) diff -Nrcpad gcc-4.5.2/libstdc++-v3/include/bits/random.tcc gcc-4.5.3/libstdc++-v3/include/bits/random.tcc *** gcc-4.5.2/libstdc++-v3/include/bits/random.tcc Tue Oct 12 13:53:18 2010 --- gcc-4.5.3/libstdc++-v3/include/bits/random.tcc Mon Mar 14 18:10:36 2011 *************** *** 1,6 **** // random number generation (out of line) -*- C++ -*- ! // Copyright (C) 2009, 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the --- 1,6 ---- // random number generation (out of line) -*- C++ -*- ! // Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the *************** namespace std *** 1392,1398 **** { result_type __ret; const _IntType __t = __param.t(); ! const _IntType __p = __param.p(); const double __p12 = __p <= 0.5 ? __p : 1.0 - __p; __detail::_Adaptor<_UniformRandomNumberGenerator, double> __aurng(__urng); --- 1392,1398 ---- { result_type __ret; const _IntType __t = __param.t(); ! const double __p = __param.p(); const double __p12 = __p <= 0.5 ? __p : 1.0 - __p; __detail::_Adaptor<_UniformRandomNumberGenerator, double> __aurng(__urng); diff -Nrcpad gcc-4.5.2/libstdc++-v3/include/ext/algorithm gcc-4.5.3/libstdc++-v3/include/ext/algorithm *** gcc-4.5.2/libstdc++-v3/include/ext/algorithm Tue Jun 29 10:04:01 2010 --- gcc-4.5.3/libstdc++-v3/include/ext/algorithm Sat Feb 12 21:26:58 2011 *************** *** 1,6 **** // Algorithm extensions -*- C++ -*- ! // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free --- 1,7 ---- // Algorithm extensions -*- C++ -*- ! // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, ! // 2009, 2010, 2011 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free *************** _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) *** 424,429 **** --- 425,433 ---- __out_last - __out_first); } + #ifdef __GXX_EXPERIMENTAL_CXX0X__ + using std::is_heap; + #else /** * This is an SGI extension. * @ingroup SGIextensions *************** _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) *** 463,468 **** --- 467,473 ---- return std::__is_heap(__first, __comp, __last - __first); } + #endif // is_sorted, a predicated testing whether a range is sorted in // nondescending order. This is an extension, not part of the C++ diff -Nrcpad gcc-4.5.2/libstdc++-v3/include/parallel/algo.h gcc-4.5.3/libstdc++-v3/include/parallel/algo.h *** gcc-4.5.2/libstdc++-v3/include/parallel/algo.h Mon Mar 22 17:06:50 2010 --- gcc-4.5.3/libstdc++-v3/include/parallel/algo.h Fri Feb 25 14:01:17 2011 *************** namespace __parallel *** 292,298 **** typedef typename _IIterTraits::value_type _IValueType; typedef typename iteratorf_traits::value_type _FValueType; ! return _GLIBCXX_STD_P::find_first_of(__begin1, __end1, __begin2, __end2, __gnu_parallel::_EqualTo<_IValueType, _FValueType>()); } --- 292,298 ---- typedef typename _IIterTraits::value_type _IValueType; typedef typename iteratorf_traits::value_type _FValueType; ! return __gnu_parallel::find_first_of(__begin1, __end1, __begin2, __end2, __gnu_parallel::_EqualTo<_IValueType, _FValueType>()); } *************** namespace __parallel *** 1160,1166 **** const _Tp& __val) { typedef typename iterator_traits<_FIterator>::value_type _ValueType; ! return _GLIBCXX_STD_P::search_n(__begin, __end, __count, __val, __gnu_parallel::_EqualTo<_ValueType, _Tp>()); } --- 1160,1166 ---- const _Tp& __val) { typedef typename iterator_traits<_FIterator>::value_type _ValueType; ! return __gnu_parallel::search_n(__begin, __end, __count, __val, __gnu_parallel::_EqualTo<_ValueType, _Tp>()); } *************** namespace __parallel *** 2086,2092 **** typedef typename _Iterator1Traits::value_type _ValueType1; typedef typename _Iterator2Traits::value_type _ValueType2; ! return _GLIBCXX_STD_P::merge(__begin1, __end1, __begin2, __end2, __result, __gnu_parallel::_Less<_ValueType1, _ValueType2>()); } --- 2086,2092 ---- typedef typename _Iterator1Traits::value_type _ValueType1; typedef typename _Iterator2Traits::value_type _ValueType2; ! return __gnu_parallel::merge(__begin1, __end1, __begin2, __end2, __result, __gnu_parallel::_Less<_ValueType1, _ValueType2>()); } *************** namespace __parallel *** 2128,2134 **** { typedef iterator_traits<_RAIter> _TraitsType; typedef typename _TraitsType::value_type _ValueType; ! _GLIBCXX_STD_P::nth_element(__begin, __nth, __end, std::less<_ValueType>()); } --- 2128,2134 ---- { typedef iterator_traits<_RAIter> _TraitsType; typedef typename _TraitsType::value_type _ValueType; ! __gnu_parallel::nth_element(__begin, __nth, __end, std::less<_ValueType>()); } *************** namespace __parallel *** 2171,2177 **** { typedef iterator_traits<_RAIter> _TraitsType; typedef typename _TraitsType::value_type _ValueType; ! _GLIBCXX_STD_P::partial_sort(__begin, __middle, __end, std::less<_ValueType>()); } --- 2171,2177 ---- { typedef iterator_traits<_RAIter> _TraitsType; typedef typename _TraitsType::value_type _ValueType; ! __gnu_parallel::partial_sort(__begin, __middle, __end, std::less<_ValueType>()); } *************** namespace __parallel *** 2241,2247 **** max_element(_FIterator __begin, _FIterator __end) { typedef typename iterator_traits<_FIterator>::value_type _ValueType; ! return _GLIBCXX_STD_P::max_element(__begin, __end, std::less<_ValueType>()); } --- 2241,2247 ---- max_element(_FIterator __begin, _FIterator __end) { typedef typename iterator_traits<_FIterator>::value_type _ValueType; ! return __gnu_parallel::max_element(__begin, __end, std::less<_ValueType>()); } *************** namespace __parallel *** 2333,2339 **** min_element(_FIterator __begin, _FIterator __end) { typedef typename iterator_traits<_FIterator>::value_type _ValueType; ! return _GLIBCXX_STD_P::min_element(__begin, __end, std::less<_ValueType>()); } --- 2333,2339 ---- min_element(_FIterator __begin, _FIterator __end) { typedef typename iterator_traits<_FIterator>::value_type _ValueType; ! return __gnu_parallel::min_element(__begin, __end, std::less<_ValueType>()); } diff -Nrcpad gcc-4.5.2/libstdc++-v3/include/parallel/algobase.h gcc-4.5.3/libstdc++-v3/include/parallel/algobase.h *** gcc-4.5.2/libstdc++-v3/include/parallel/algobase.h Mon Mar 22 17:06:50 2010 --- gcc-4.5.3/libstdc++-v3/include/parallel/algobase.h Fri Feb 25 14:01:17 2011 *************** namespace __parallel *** 142,148 **** inline bool equal(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2) { ! return _GLIBCXX_STD_P::mismatch(__begin1, __end1, __begin2).first == __end1; } --- 142,148 ---- inline bool equal(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2) { ! return __gnu_parallel::mismatch(__begin1, __end1, __begin2).first == __end1; } *************** namespace __parallel *** 152,158 **** equal(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, _Predicate __pred) { ! return _GLIBCXX_STD_P::mismatch(__begin1, __end1, __begin2, __pred).first == __end1; } --- 152,158 ---- equal(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, _Predicate __pred) { ! return __gnu_parallel::mismatch(__begin1, __end1, __begin2, __pred).first == __end1; } diff -Nrcpad gcc-4.5.2/libstdc++-v3/include/parallel/balanced_quicksort.h gcc-4.5.3/libstdc++-v3/include/parallel/balanced_quicksort.h *** gcc-4.5.2/libstdc++-v3/include/parallel/balanced_quicksort.h Tue Jan 12 00:51:50 2010 --- gcc-4.5.3/libstdc++-v3/include/parallel/balanced_quicksort.h Fri Feb 25 14:04:40 2011 *************** namespace __gnu_parallel *** 132,138 **** // Swap pivot value to end. if (__pivot_pos != (__end - 1)) ! std::swap(*__pivot_pos, *(__end - 1)); __pivot_pos = __end - 1; __gnu_parallel::__binder2nd<_Compare, _ValueType, _ValueType, bool> --- 132,138 ---- // Swap pivot value to end. if (__pivot_pos != (__end - 1)) ! std::iter_swap(__pivot_pos, __end - 1); __pivot_pos = __end - 1; __gnu_parallel::__binder2nd<_Compare, _ValueType, _ValueType, bool> *************** namespace __gnu_parallel *** 144,150 **** __num_threads); // Swap back pivot to middle. ! std::swap(*(__begin + __split_pos), *__pivot_pos); __pivot_pos = __begin + __split_pos; #if _GLIBCXX_ASSERTIONS --- 144,150 ---- __num_threads); // Swap back pivot to middle. ! std::iter_swap(__begin + __split_pos, __pivot_pos); __pivot_pos = __begin + __split_pos; #if _GLIBCXX_ASSERTIONS *************** namespace __gnu_parallel *** 284,290 **** // Swap __pivot_pos value to end. if (__pivot_pos != (__end - 1)) ! std::swap(*__pivot_pos, *(__end - 1)); __pivot_pos = __end - 1; __gnu_parallel::__binder2nd --- 284,290 ---- // Swap __pivot_pos value to end. if (__pivot_pos != (__end - 1)) ! std::iter_swap(__pivot_pos, __end - 1); __pivot_pos = __end - 1; __gnu_parallel::__binder2nd *************** namespace __gnu_parallel *** 303,309 **** #endif // Swap pivot back to middle. if (__split_pos1 != __pivot_pos) ! std::swap(*__split_pos1, *__pivot_pos); __pivot_pos = __split_pos1; // In case all elements are equal, __split_pos1 == 0. --- 303,309 ---- #endif // Swap pivot back to middle. if (__split_pos1 != __pivot_pos) ! std::iter_swap(__split_pos1, __pivot_pos); __pivot_pos = __split_pos1; // In case all elements are equal, __split_pos1 == 0. diff -Nrcpad gcc-4.5.2/libstdc++-v3/include/parallel/losertree.h gcc-4.5.3/libstdc++-v3/include/parallel/losertree.h *** gcc-4.5.2/libstdc++-v3/include/parallel/losertree.h Mon Dec 7 14:27:59 2009 --- gcc-4.5.3/libstdc++-v3/include/parallel/losertree.h Fri Feb 25 14:04:40 2011 *************** namespace __gnu_parallel *** 216,221 **** --- 216,222 ---- void __delete_min_insert(_Tp __key, bool __sup) { + using std::swap; #if _GLIBCXX_ASSERTIONS // no dummy sequence can ever be at the top! _GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1); *************** namespace __gnu_parallel *** 236,242 **** // The other one is smaller. std::swap(_M_losers[__pos]._M_sup, __sup); std::swap(_M_losers[__pos]._M_source, __source); ! std::swap(_M_losers[__pos]._M_key, __key); } } --- 237,243 ---- // The other one is smaller. std::swap(_M_losers[__pos]._M_sup, __sup); std::swap(_M_losers[__pos]._M_source, __source); ! swap(_M_losers[__pos]._M_key, __key); } } *************** namespace __gnu_parallel *** 316,321 **** --- 317,323 ---- void __delete_min_insert(_Tp __key, bool __sup) { + using std::swap; #if _GLIBCXX_ASSERTIONS // no dummy sequence can ever be at the top! _GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1); *************** namespace __gnu_parallel *** 332,338 **** // The other one is smaller. std::swap(_M_losers[__pos]._M_sup, __sup); std::swap(_M_losers[__pos]._M_source, __source); ! std::swap(_M_losers[__pos]._M_key, __key); } } --- 334,340 ---- // The other one is smaller. std::swap(_M_losers[__pos]._M_sup, __sup); std::swap(_M_losers[__pos]._M_source, __source); ! swap(_M_losers[__pos]._M_key, __key); } } *************** namespace __gnu_parallel *** 679,684 **** --- 681,687 ---- void __delete_min_insert(_Tp __key, bool) { + using std::swap; #if _GLIBCXX_ASSERTIONS // no dummy sequence can ever be at the top! _GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1); *************** namespace __gnu_parallel *** 695,701 **** { // The other one is smaller. std::swap(_M_losers[__pos]._M_source, __source); ! std::swap(_M_losers[__pos]._M_key, __key); } } --- 698,704 ---- { // The other one is smaller. std::swap(_M_losers[__pos]._M_source, __source); ! swap(_M_losers[__pos]._M_key, __key); } } *************** namespace __gnu_parallel *** 772,777 **** --- 775,781 ---- void __delete_min_insert(_Tp __key, bool) { + using std::swap; #if _GLIBCXX_ASSERTIONS // no dummy sequence can ever be at the top! _GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1); *************** namespace __gnu_parallel *** 786,792 **** { // The other one is smaller. std::swap(_M_losers[__pos]._M_source, __source); ! std::swap(_M_losers[__pos]._M_key, __key); } } --- 790,796 ---- { // The other one is smaller. std::swap(_M_losers[__pos]._M_source, __source); ! swap(_M_losers[__pos]._M_key, __key); } } diff -Nrcpad gcc-4.5.2/libstdc++-v3/include/parallel/numeric gcc-4.5.3/libstdc++-v3/include/parallel/numeric *** gcc-4.5.2/libstdc++-v3/include/parallel/numeric Mon Mar 22 17:06:50 2010 --- gcc-4.5.3/libstdc++-v3/include/parallel/numeric Fri Feb 25 14:01:17 2011 *************** namespace __parallel *** 283,289 **** typedef typename __gnu_parallel::_Multiplies<_ValueType1, _ValueType2>::result_type _MultipliesResultType; ! return _GLIBCXX_STD_P::inner_product(__first1, __last1, __first2, __init, __gnu_parallel::_Plus<_Tp, _MultipliesResultType>(), __gnu_parallel:: _Multiplies<_ValueType1, _ValueType2>(), --- 283,289 ---- typedef typename __gnu_parallel::_Multiplies<_ValueType1, _ValueType2>::result_type _MultipliesResultType; ! return __gnu_parallel::inner_product(__first1, __last1, __first2, __init, __gnu_parallel::_Plus<_Tp, _MultipliesResultType>(), __gnu_parallel:: _Multiplies<_ValueType1, _ValueType2>(), *************** namespace __parallel *** 303,309 **** typedef typename __gnu_parallel::_Multiplies<_ValueType1, _ValueType2>::result_type _MultipliesResultType; ! return _GLIBCXX_STD_P::inner_product(__first1, __last1, __first2, __init, __gnu_parallel::_Plus<_Tp, _MultipliesResultType>(), __gnu_parallel:: _Multiplies<_ValueType1, _ValueType2>()); --- 303,309 ---- typedef typename __gnu_parallel::_Multiplies<_ValueType1, _ValueType2>::result_type _MultipliesResultType; ! return __gnu_parallel::inner_product(__first1, __last1, __first2, __init, __gnu_parallel::_Plus<_Tp, _MultipliesResultType>(), __gnu_parallel:: _Multiplies<_ValueType1, _ValueType2>()); *************** namespace __parallel *** 359,365 **** partial_sum(_IIter __begin, _IIter __end, _OutputIterator __result) { typedef typename iterator_traits<_IIter>::value_type _ValueType; ! return _GLIBCXX_STD_P::partial_sum(__begin, __end, __result, std::plus<_ValueType>()); } --- 359,365 ---- partial_sum(_IIter __begin, _IIter __end, _OutputIterator __result) { typedef typename iterator_traits<_IIter>::value_type _ValueType; ! return __gnu_parallel::partial_sum(__begin, __end, __result, std::plus<_ValueType>()); } diff -Nrcpad gcc-4.5.2/libstdc++-v3/include/parallel/partition.h gcc-4.5.3/libstdc++-v3/include/parallel/partition.h *** gcc-4.5.2/libstdc++-v3/include/parallel/partition.h Tue Jan 12 00:51:50 2010 --- gcc-4.5.3/libstdc++-v3/include/parallel/partition.h Fri Feb 25 14:04:40 2011 *************** namespace __gnu_parallel *** 171,178 **** // Fetch new chunk(__s). break; ! std::swap(__begin[__thread_left], ! __begin[__thread_right]); ++__thread_left; --__thread_right; } --- 171,178 ---- // Fetch new chunk(__s). break; ! std::iter_swap(__begin + __thread_left, ! __begin + __thread_right); ++__thread_left; --__thread_right; } *************** namespace __gnu_parallel *** 303,309 **** if (__final_left == __final_right) break; ! std::swap(__begin[__final_left], __begin[__final_right]); ++__final_left; --__final_right; } --- 303,309 ---- if (__final_left == __final_right) break; ! std::iter_swap(__begin + __final_left, __begin + __final_right); ++__final_left; --__final_right; } *************** namespace __gnu_parallel *** 358,364 **** // Swap __pivot_pos value to end. if (__pivot_pos != (__end - 1)) ! std::swap(*__pivot_pos, *(__end - 1)); __pivot_pos = __end - 1; // _Compare must have first_value_type, second_value_type, --- 358,364 ---- // Swap __pivot_pos value to end. if (__pivot_pos != (__end - 1)) ! std::iter_swap(__pivot_pos, __end - 1); __pivot_pos = __end - 1; // _Compare must have first_value_type, second_value_type, *************** namespace __gnu_parallel *** 380,386 **** // Swap pivot back to middle. if (__split_pos1 != __pivot_pos) ! std::swap(*__split_pos1, *__pivot_pos); __pivot_pos = __split_pos1; // In case all elements are equal, __split_pos1 == 0 --- 380,386 ---- // Swap pivot back to middle. if (__split_pos1 != __pivot_pos) ! std::iter_swap(__split_pos1, __pivot_pos); __pivot_pos = __split_pos1; // In case all elements are equal, __split_pos1 == 0 diff -Nrcpad gcc-4.5.2/libstdc++-v3/src/bitmap_allocator.cc gcc-4.5.3/libstdc++-v3/src/bitmap_allocator.cc *** gcc-4.5.2/libstdc++-v3/src/bitmap_allocator.cc Thu Nov 19 19:21:05 2009 --- gcc-4.5.3/libstdc++-v3/src/bitmap_allocator.cc Wed Jan 19 08:49:58 2011 *************** _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) *** 49,54 **** --- 49,55 ---- { #if defined __GTHREADS __mutex_type& __bfl_mutex = _M_get_mutex(); + __bfl_mutex.lock(); #endif const vector_type& __free_list = _M_get_free_list(); using __gnu_cxx::__detail::__lower_bound; diff -Nrcpad gcc-4.5.2/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc gcc-4.5.3/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc *** gcc-4.5.2/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc Fri Sep 17 10:18:33 2010 --- gcc-4.5.3/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc Mon Mar 21 13:41:37 2011 *************** *** 1,6 **** // 2004-04-30 Paolo Carlini ! // Copyright (C) 2004, 2009, 2010 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the --- 1,6 ---- // 2004-04-30 Paolo Carlini ! // Copyright (C) 2004, 2009, 2010, 2011 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the *************** *** 19,31 **** // 22.2.2.2.1 num_put members ! // On Solaris 9/x86, 32-bit Solaris 10/x86 and 64-bit Solaris 10/SPARC, this ! // test crashes in libc. Inside libstdc++, we call sprintf like so: // sprintf (buffer, "%.*f", 1000, 1.0) // which crashes. // { dg-xfail-run-if "" i?86-*-solaris2.9 } // { dg-xfail-run-if "" { i?86-*-solaris2.10 && ilp32 } } - // { dg-xfail-run-if "" { sparc*-sun-solaris2.10 && lp64 } } #include #include --- 19,30 ---- // 22.2.2.2.1 num_put members ! // On Solaris 9/x86 and 32-bit Solaris 10/x86, this test crashes in libc. ! // Inside libstdc++, we call sprintf like so: // sprintf (buffer, "%.*f", 1000, 1.0) // which crashes. // { dg-xfail-run-if "" i?86-*-solaris2.9 } // { dg-xfail-run-if "" { i?86-*-solaris2.10 && ilp32 } } #include #include diff -Nrcpad gcc-4.5.2/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed1.cc gcc-4.5.3/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed1.cc *** gcc-4.5.2/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed1.cc Thu Apr 9 15:00:19 2009 --- gcc-4.5.3/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed1.cc Fri Feb 25 14:01:17 2011 *************** void test() *** 30,36 **** const value_type c(0); ! vector_type v(10); std::find(v.begin(), v.end(), c); __gnu_parallel::find(v.begin(), v.end(), c); } --- 30,88 ---- const value_type c(0); ! vector_type v(10), result(20); ! ! std::equal(v.begin(), v.end(), v.begin()); ! std::equal(v.begin(), v.end(), v.begin(), std::equal_to()); ! __gnu_parallel::equal(v.begin(), v.end(), v.begin()); ! __gnu_parallel::equal(v.begin(), v.end(), v.begin(), ! std::equal_to()); ! std::find(v.begin(), v.end(), c); __gnu_parallel::find(v.begin(), v.end(), c); + + std::find_first_of(v.begin(), v.end(), v.begin(), v.end()); + std::find_first_of(v.begin(), v.end(), v.begin(), v.end(), + std::equal_to()); + __gnu_parallel::find_first_of(v.begin(), v.end(), v.begin(), v.end()); + __gnu_parallel::find_first_of(v.begin(), v.end(), v.begin(), v.end(), + std::equal_to()); + + std::search_n(v.begin(), v.end(), 5, value_type(1)); + std::search_n(v.begin(), v.end(), 5, value_type(1), + std::equal_to()); + __gnu_parallel::search_n(v.begin(), v.end(), 5, value_type(1)); + __gnu_parallel::search_n(v.begin(), v.end(), 5, value_type(1), + std::equal_to()); + + std::merge(v.begin(), v.end(), v.begin(), v.end(), result.begin()); + std::merge(v.begin(), v.end(), v.begin(), v.end(), result.begin(), + std::less()); + __gnu_parallel::merge(v.begin(), v.end(), v.begin(), v.end(), + result.begin()); + __gnu_parallel::merge(v.begin(), v.end(), v.begin(), v.end(), + result.begin(), std::less()); + + std::nth_element(v.begin(), v.begin() + 5, v.end()); + std::nth_element(v.begin(), v.begin() + 5, v.end(), std::less()); + __gnu_parallel::nth_element(v.begin(), v.begin() + 5, v.end()); + __gnu_parallel::nth_element(v.begin(), v.begin() + 5, v.end(), + std::less()); + + std::partial_sort(v.begin(), v.begin() + 5, v.end()); + std::partial_sort(v.begin(), v.begin() + 5, v.end(), + std::less()); + __gnu_parallel::partial_sort(v.begin(), v.begin() + 5, v.end()); + __gnu_parallel::partial_sort(v.begin(), v.begin() + 5, v.end(), + std::less()); + + std::min_element(v.begin(), v.end()); + std::min_element(v.begin(), v.end(), std::less()); + __gnu_parallel::min_element(v.begin(), v.end()); + __gnu_parallel::min_element(v.begin(), v.end(), std::less()); + + std::max_element(v.begin(), v.end()); + std::max_element(v.begin(), v.end(), std::less()); + __gnu_parallel::max_element(v.begin(), v.end()); + __gnu_parallel::max_element(v.begin(), v.end(), std::less()); } diff -Nrcpad gcc-4.5.2/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed2.cc gcc-4.5.3/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed2.cc *** gcc-4.5.2/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed2.cc Thu Apr 9 15:00:19 2009 --- gcc-4.5.3/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed2.cc Fri Feb 25 14:01:17 2011 *************** void test() *** 35,41 **** const value_type c(0); ! vector_type v(10); std::find(v.begin(), v.end(), c); __gnu_parallel::find(v.begin(), v.end(), c); } --- 35,93 ---- const value_type c(0); ! vector_type v(10), result(20); ! ! std::equal(v.begin(), v.end(), v.begin()); ! std::equal(v.begin(), v.end(), v.begin(), std::equal_to()); ! __gnu_parallel::equal(v.begin(), v.end(), v.begin()); ! __gnu_parallel::equal(v.begin(), v.end(), v.begin(), ! std::equal_to()); ! std::find(v.begin(), v.end(), c); __gnu_parallel::find(v.begin(), v.end(), c); + + std::find_first_of(v.begin(), v.end(), v.begin(), v.end()); + std::find_first_of(v.begin(), v.end(), v.begin(), v.end(), + std::equal_to()); + __gnu_parallel::find_first_of(v.begin(), v.end(), v.begin(), v.end()); + __gnu_parallel::find_first_of(v.begin(), v.end(), v.begin(), v.end(), + std::equal_to()); + + std::search_n(v.begin(), v.end(), 5, value_type(1)); + std::search_n(v.begin(), v.end(), 5, value_type(1), + std::equal_to()); + __gnu_parallel::search_n(v.begin(), v.end(), 5, value_type(1)); + __gnu_parallel::search_n(v.begin(), v.end(), 5, value_type(1), + std::equal_to()); + + std::merge(v.begin(), v.end(), v.begin(), v.end(), result.begin()); + std::merge(v.begin(), v.end(), v.begin(), v.end(), result.begin(), + std::less()); + __gnu_parallel::merge(v.begin(), v.end(), v.begin(), v.end(), + result.begin()); + __gnu_parallel::merge(v.begin(), v.end(), v.begin(), v.end(), + result.begin(), std::less()); + + std::nth_element(v.begin(), v.begin() + 5, v.end()); + std::nth_element(v.begin(), v.begin() + 5, v.end(), std::less()); + __gnu_parallel::nth_element(v.begin(), v.begin() + 5, v.end()); + __gnu_parallel::nth_element(v.begin(), v.begin() + 5, v.end(), + std::less()); + + std::partial_sort(v.begin(), v.begin() + 5, v.end()); + std::partial_sort(v.begin(), v.begin() + 5, v.end(), + std::less()); + __gnu_parallel::partial_sort(v.begin(), v.begin() + 5, v.end()); + __gnu_parallel::partial_sort(v.begin(), v.begin() + 5, v.end(), + std::less()); + + std::min_element(v.begin(), v.end()); + std::min_element(v.begin(), v.end(), std::less()); + __gnu_parallel::min_element(v.begin(), v.end()); + __gnu_parallel::min_element(v.begin(), v.end(), std::less()); + + std::max_element(v.begin(), v.end()); + std::max_element(v.begin(), v.end(), std::less()); + __gnu_parallel::max_element(v.begin(), v.end()); + __gnu_parallel::max_element(v.begin(), v.end(), std::less()); } diff -Nrcpad gcc-4.5.2/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed1.cc gcc-4.5.3/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed1.cc *** gcc-4.5.2/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed1.cc Thu Apr 9 15:00:19 2009 --- gcc-4.5.3/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed1.cc Fri Feb 25 14:01:17 2011 *************** void test() *** 32,37 **** --- 32,48 ---- const value_type c(0); vector_type v(10); + std::accumulate(v.begin(), v.end(), value_type(1)); + std::accumulate(v.begin(), v.end(), value_type(1), std::plus()); __gnu_parallel::accumulate(v.begin(), v.end(), value_type(1)); + __gnu_parallel::accumulate(v.begin(), v.end(), value_type(1), + std::plus()); + + std::inner_product(v.begin(), v.end(), v.begin(), value_type(1)); + std::inner_product(v.begin(), v.end(), v.begin(), value_type(1), + std::multiplies(), std::plus()); + __gnu_parallel::inner_product(v.begin(), v.end(), v.begin(), value_type(1)); + __gnu_parallel::inner_product(v.begin(), v.end(), v.begin(), value_type(1), + std::multiplies(), std::plus()); } diff -Nrcpad gcc-4.5.2/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed2.cc gcc-4.5.3/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed2.cc *** gcc-4.5.2/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed2.cc Thu Apr 9 15:00:19 2009 --- gcc-4.5.3/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed2.cc Fri Feb 25 14:01:17 2011 *************** void test() *** 37,42 **** --- 37,53 ---- const value_type c(0); vector_type v(10); + std::accumulate(v.begin(), v.end(), value_type(1)); + std::accumulate(v.begin(), v.end(), value_type(1), std::plus()); __gnu_parallel::accumulate(v.begin(), v.end(), value_type(1)); + __gnu_parallel::accumulate(v.begin(), v.end(), value_type(1), + std::plus()); + + std::inner_product(v.begin(), v.end(), v.begin(), value_type(1)); + std::inner_product(v.begin(), v.end(), v.begin(), value_type(1), + std::multiplies(), std::plus()); + __gnu_parallel::inner_product(v.begin(), v.end(), v.begin(), value_type(1)); + __gnu_parallel::inner_product(v.begin(), v.end(), v.begin(), value_type(1), + std::multiplies(), std::plus()); } diff -Nrcpad gcc-4.5.2/libstdc++-v3/testsuite/ext/is_heap/47709.cc gcc-4.5.3/libstdc++-v3/testsuite/ext/is_heap/47709.cc *** gcc-4.5.2/libstdc++-v3/testsuite/ext/is_heap/47709.cc Thu Jan 1 00:00:00 1970 --- gcc-4.5.3/libstdc++-v3/testsuite/ext/is_heap/47709.cc Sat Feb 12 21:26:58 2011 *************** *** 0 **** --- 1,29 ---- + // { dg-do compile } + // { dg-options "-std=gnu++0x" } + + // Copyright (C) 2011 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the + // terms of the GNU General Public License as published by the + // Free Software Foundation; either version 3, or (at your option) + // any later version. + + // This library is distributed in the hope that it will be useful, + // but WITHOUT ANY WARRANTY; without even the implied warranty of + // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + // GNU General Public License for more details. + + // You should have received a copy of the GNU General Public License along + // with this library; see the file COPYING3. If not see + // . + + #include + #include + + // libstdc++/47709 + void foo() + { + std::vector v; + is_heap(v.begin(), v.end()); + } diff -Nrcpad gcc-4.5.2/libstdc++-v3/testsuite/lib/libstdc++.exp gcc-4.5.3/libstdc++-v3/testsuite/lib/libstdc++.exp *** gcc-4.5.2/libstdc++-v3/testsuite/lib/libstdc++.exp Thu Jan 7 00:22:51 2010 --- gcc-4.5.3/libstdc++-v3/testsuite/lib/libstdc++.exp Fri Dec 17 14:36:49 2010 *************** proc v3-build_support { } { *** 586,591 **** --- 586,600 ---- } # Collect into libtestc++.a + # Delete libtestc++.a first. Mixed 32 and 64-bit archives cannot be + # linked on IRIX 6. + # Use same procedure as gcc-dg.exp (remove-build-file). + if [is_remote host] { + # Ensure the host knows the file is gone by deleting there + # first. + remote_file host delete "./libtestc++.a" + } + remote_file build delete "./libtestc++.a" if [info exists env(AR)] { set ar $env(AR) } else {