diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/gcc/cp/ChangeLog gcc-2.95.1/gcc/cp/ChangeLog *** gcc-2.95/gcc/cp/ChangeLog Wed Jul 28 21:39:42 1999 --- gcc-2.95.1/gcc/cp/ChangeLog Mon Aug 16 01:29:45 1999 *************** *** 1,8 **** ! Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com) ! * gcc-2.95 Released. ! Sun Jul 25 23:40:51 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95 Released. --- 1,81 ---- ! Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com) ! ! * gcc-2.95.1 Released. ! ! 1999-08-12 Mark Mitchell ! ! * decl2.c (lang_decode_option): Deprecate signatures. ! ! 1999-08-11 Martin v. Loewis ! ! * lex.c (do_identifier): If we find a hidden type after a global ! was selected already, continue using the global. ! ! 1999-08-10 Martin v. Loewis ! ! * decl2.c (set_decl_namespace): Do not complain about non-matching ! decls if processing a template. ! ! 1999-08-09 Jason Merrill ! ! * parse.y (function_try_block): Call end_protect_partials ! before expand_start_all_catch. ! ! 1999-08-06 Jason Merrill ! ! * pt.c (maybe_get_template_decl_from_type_decl): Make sure that ! we're looking at a class. ! ! * decl.c (lookup_name_real): Set the complain flag if we're ! looking for a namespace member. ! ! * decl.c (pushdecl): Only give an error for shadowing a parm ! from *this* function. ! ! * decl2.c (build_expr_from_tree, case METHOD_CALL_EXPR): Only ! build_expr_from_tree on the args of a TEMPLATE_ID_EXPR. ! * class.c (mark_overriders): Fix order of args to overrides. ! (warn_hidden): Likewise. Fix for having virtual and non-virtual ! functions with the same name. ! * cp-tree.h (DECL_VIRTUAL_CONTEXT): New macro. ! * typeck.c (expand_ptrmemfunc_cst): Calculate delta correctly for ! virtual functions and MI. Simplify. ! ! * typeck.c (c_expand_return): Downgrade pedwarn about returning NULL ! from op new to warning. ! ! * decl2.c (reparse_absdcl_as_casts): Don't warn about old-style ! casts in system headers or extern "C" blocks. ! ! * pt.c (do_decl_instantiation): Downgrade duplicate instantiation ! errors to pedwarn. ! ! * error.c (dump_type_real): Handle TREE_LIST again. ! ! * typeck.c (comp_target_parms): Don't complain about ! converting from () to (...) if !flag_strict_prototype. ! ! * class.c (instantiate_type): Downgrade errors for object-dependent ! memfn refs to pedwarn. ! ! 1999-08-06 Alexandre Oliva ! ! * pt.c (tsubst): Use build_index_type to build in-template array ! index type. Fixes g++.oliva/dwarf1.C. ! * decl.c (grokdeclarator): Likewise, just for consistency, as it ! doesn't seem to trigger the bug without it. ! ! Thu Aug 5 02:40:42 1999 Jeffrey A Law (law@cygnus.com) ! ! * typeck2.c: Update URLs and mail addresses. ! ! 1999-08-03 Mumit Khan ! ! * decl.c (start_decl): Set attributes before duplicate_decls call. ! ! Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95 Released. diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/gcc/cp/class.c gcc-2.95.1/gcc/cp/class.c *** gcc-2.95/gcc/cp/class.c Tue Jun 15 09:48:22 1999 --- gcc-2.95.1/gcc/cp/class.c Fri Aug 6 18:31:51 1999 *************** get_basefndecls (fndecl, t) *** 2785,2802 **** /* Mark the functions that have been hidden with their overriders. Since we start out with all functions already marked with a hider, ! no need to mark functions that are just hidden. */ static void mark_overriders (fndecl, base_fndecls) tree fndecl, base_fndecls; { ! while (base_fndecls) { ! if (overrides (TREE_VALUE (base_fndecls), fndecl)) TREE_PURPOSE (base_fndecls) = fndecl; - - base_fndecls = TREE_CHAIN (base_fndecls); } } --- 2785,2802 ---- /* Mark the functions that have been hidden with their overriders. Since we start out with all functions already marked with a hider, ! no need to mark functions that are just hidden. ! ! Subroutine of warn_hidden. */ static void mark_overriders (fndecl, base_fndecls) tree fndecl, base_fndecls; { ! for (; base_fndecls; base_fndecls = TREE_CHAIN (base_fndecls)) { ! if (overrides (fndecl, TREE_VALUE (base_fndecls))) TREE_PURPOSE (base_fndecls) = fndecl; } } *************** warn_hidden (t) *** 2884,2891 **** tree binfos = BINFO_BASETYPES (TYPE_BINFO (t)); int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0; ! fndecl = OVL_CURRENT (fns); ! if (DECL_VINDEX (fndecl) == NULL_TREE) continue; /* First we get a list of all possible functions that might be --- 2884,2898 ---- tree binfos = BINFO_BASETYPES (TYPE_BINFO (t)); int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0; ! /* First see if we have any virtual functions in this batch. */ ! for (; fns; fns = OVL_NEXT (fns)) ! { ! fndecl = OVL_CURRENT (fns); ! if (DECL_VINDEX (fndecl)) ! break; ! } ! ! if (fns == NULL_TREE) continue; /* First we get a list of all possible functions that might be *************** warn_hidden (t) *** 2900,2937 **** } fns = OVL_NEXT (fns); - if (fns) - fndecl = OVL_CURRENT (fns); - else - fndecl = NULL_TREE; /* ...then mark up all the base functions with overriders, preferring overriders to hiders. */ if (base_fndecls) ! while (fndecl) { ! mark_overriders (fndecl, base_fndecls); ! ! fns = OVL_NEXT (fns); ! if (fns) ! fndecl = OVL_CURRENT (fns); ! else ! fndecl = NULL_TREE; } /* Now give a warning for all base functions without overriders, as they are hidden. */ ! while (base_fndecls) { ! if (! overrides (TREE_VALUE (base_fndecls), ! TREE_PURPOSE (base_fndecls))) { /* Here we know it is a hider, and no overrider exists. */ cp_warning_at ("`%D' was hidden", TREE_VALUE (base_fndecls)); cp_warning_at (" by `%D'", TREE_PURPOSE (base_fndecls)); } - - base_fndecls = TREE_CHAIN (base_fndecls); } } } --- 2907,2934 ---- } fns = OVL_NEXT (fns); /* ...then mark up all the base functions with overriders, preferring overriders to hiders. */ if (base_fndecls) ! for (; fns; fns = OVL_NEXT (fns)) { ! fndecl = OVL_CURRENT (fns); ! if (DECL_VINDEX (fndecl)) ! mark_overriders (fndecl, base_fndecls); } /* Now give a warning for all base functions without overriders, as they are hidden. */ ! for (; base_fndecls; base_fndecls = TREE_CHAIN (base_fndecls)) { ! if (! overrides (TREE_PURPOSE (base_fndecls), ! TREE_VALUE (base_fndecls))) { /* Here we know it is a hider, and no overrider exists. */ cp_warning_at ("`%D' was hidden", TREE_VALUE (base_fndecls)); cp_warning_at (" by `%D'", TREE_PURPOSE (base_fndecls)); } } } } *************** instantiate_type (lhstype, rhs, flags) *** 5019,5033 **** field = OVL_FUNCTION (field); if (TREE_CODE (field) == FUNCTION_DECL) { ! cp_error ("object-dependent reference `%E' can only be used in a call", DECL_NAME (field)); ! cp_error (" to form a pointer to member function, say `&%T::%E'", t, DECL_NAME (field)); } else ! cp_error ("object-dependent reference can only be used in a call"); } ! return error_mark_node; } return r; --- 5016,5030 ---- field = OVL_FUNCTION (field); if (TREE_CODE (field) == FUNCTION_DECL) { ! cp_pedwarn ("object-dependent reference `%E' can only be used in a call", DECL_NAME (field)); ! cp_pedwarn (" to form a pointer to member function, say `&%T::%E'", t, DECL_NAME (field)); } else ! cp_pedwarn ("object-dependent reference can only be used in a call"); } ! return r; } return r; diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/gcc/cp/cp-tree.h gcc-2.95.1/gcc/cp/cp-tree.h *** gcc-2.95/gcc/cp/cp-tree.h Tue Jun 15 09:48:20 1999 --- gcc-2.95.1/gcc/cp/cp-tree.h Fri Aug 6 18:31:52 1999 *************** struct lang_decl *** 1327,1332 **** --- 1327,1336 ---- (DECL_CONTEXT (NODE) ? DECL_CONTEXT (NODE) : global_namespace) #define FROB_CONTEXT(NODE) ((NODE) == global_namespace ? NULL_TREE : (NODE)) + /* For a virtual function, the base where we find its vtable entry. + For a non-virtual function, the base where it is defined. */ + #define DECL_VIRTUAL_CONTEXT(NODE) DECL_CONTEXT (NODE) + /* 1 iff NODE has namespace scope, including the global namespace. */ #define DECL_NAMESPACE_SCOPE_P(NODE) \ (DECL_CONTEXT (NODE) == NULL_TREE \ diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/gcc/cp/decl.c gcc-2.95.1/gcc/cp/decl.c *** gcc-2.95/gcc/cp/decl.c Wed Jul 14 17:29:16 1999 --- gcc-2.95.1/gcc/cp/decl.c Sun Aug 8 17:28:33 1999 *************** pushdecl (x) *** 4154,4161 **** /* Warn if shadowing an argument at the top level of the body. */ else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x) ! && TREE_CODE (oldlocal) == PARM_DECL ! && TREE_CODE (x) != PARM_DECL) { /* Go to where the parms should be and see if we find them there. */ --- 4154,4163 ---- /* Warn if shadowing an argument at the top level of the body. */ else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x) ! && TREE_CODE (oldlocal) == PARM_DECL ! /* Don't complain if it's from an enclosing function. */ ! && DECL_CONTEXT (oldlocal) == current_function_decl ! && TREE_CODE (x) != PARM_DECL) { /* Go to where the parms should be and see if we find them there. */ *************** lookup_name_real (name, prefer_type, non *** 5815,5820 **** --- 5817,5823 ---- { struct tree_binding b; val = binding_init (&b); + flags |= LOOKUP_COMPLAIN; if (!qualified_lookup_using_namespace (name, type, val, flags)) return NULL_TREE; val = select_decl (val, flags); *************** start_decl (declarator, declspecs, initi *** 7339,7344 **** --- 7342,7354 ---- DECL_INITIAL (decl) = error_mark_node; } + #ifdef SET_DEFAULT_DECL_ATTRIBUTES + SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes); + #endif + + /* Set attributes here so if duplicate decl, will have proper attributes. */ + cplus_decl_attributes (decl, attributes, prefix_attributes); + if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE) { push_nested_class (context, 2); *************** start_decl (declarator, declspecs, initi *** 7396,7408 **** decl); } - #ifdef SET_DEFAULT_DECL_ATTRIBUTES - SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes); - #endif - - /* Set attributes here so if duplicate decl, will have proper attributes. */ - cplus_decl_attributes (decl, attributes, prefix_attributes); - /* Add this decl to the current binding level, but not if it comes from another scope, e.g. a static member variable. TEM may equal DECL or it may be a previous decl of the same name. */ --- 7406,7411 ---- *************** grokdeclarator (declarator, declspecs, d *** 10387,10396 **** size = t; } ! itype = make_node (INTEGER_TYPE); ! TYPE_MIN_VALUE (itype) = size_zero_node; ! TYPE_MAX_VALUE (itype) = build_min ! (MINUS_EXPR, sizetype, size, integer_one_node); goto dont_grok_size; } --- 10390,10397 ---- size = t; } ! itype = build_index_type (build_min ! (MINUS_EXPR, sizetype, size, integer_one_node)); goto dont_grok_size; } diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/gcc/cp/decl2.c gcc-2.95.1/gcc/cp/decl2.c *** gcc-2.95/gcc/cp/decl2.c Tue Jul 6 17:32:42 1999 --- gcc-2.95.1/gcc/cp/decl2.c Thu Aug 12 17:52:31 1999 *************** lang_decode_option (argc, argv) *** 633,638 **** --- 633,644 ---- found = 1; cp_deprecated ("-fexternal-templates"); } + else if (!strcmp (p, "handle-signatures")) + { + flag_handle_signatures = 1; + found = 1; + cp_deprecated ("-fhandle-signatures"); + } else if (!strcmp (p, "new-abi")) { flag_new_abi = 1; *************** reparse_absdcl_as_casts (decl, expr) *** 3814,3820 **** expr = build_c_cast (type, expr); } ! if (warn_old_style_cast) warning ("use of old-style cast"); return expr; --- 3820,3827 ---- expr = build_c_cast (type, expr); } ! if (warn_old_style_cast && ! in_system_header ! && current_lang_name != lang_name_c) warning ("use of old-style cast"); return expr; *************** build_expr_from_tree (t) *** 3988,3994 **** else { tree fn = TREE_OPERAND (t, 0); ! /* We can get a TEMPLATE_ID_EXPR here on code like: x->f<2>(); --- 3995,4001 ---- else { tree fn = TREE_OPERAND (t, 0); ! /* We can get a TEMPLATE_ID_EXPR here on code like: x->f<2>(); *************** build_expr_from_tree (t) *** 3999,4005 **** build_expr_from_tree. So, just use build_expr_from_tree when we really need it. */ if (TREE_CODE (fn) == TEMPLATE_ID_EXPR) ! fn = build_expr_from_tree (fn); return build_method_call (build_expr_from_tree (TREE_OPERAND (t, 1)), --- 4006,4014 ---- build_expr_from_tree. So, just use build_expr_from_tree when we really need it. */ if (TREE_CODE (fn) == TEMPLATE_ID_EXPR) ! fn = lookup_template_function ! (TREE_OPERAND (fn, 0), ! build_expr_from_tree (TREE_OPERAND (fn, 1))); return build_method_call (build_expr_from_tree (TREE_OPERAND (t, 1)), *************** set_decl_namespace (decl, scope, friendp *** 4488,4493 **** --- 4497,4508 ---- /* Since decl is a function, old should contain a function decl. */ if (!is_overloaded_fn (old)) goto complain; + if (processing_template_decl || processing_specialization) + /* We have not yet called push_template_decl to turn the + FUNCTION_DECL into a TEMPLATE_DECL, so the declarations + won't match. But, we'll check later, when we construct the + template. */ + return; for (; old; old = OVL_NEXT (old)) if (decls_match (decl, OVL_CURRENT (old))) return; diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/gcc/cp/error.c gcc-2.95.1/gcc/cp/error.c *** gcc-2.95/gcc/cp/error.c Mon May 10 05:12:52 1999 --- gcc-2.95.1/gcc/cp/error.c Fri Aug 6 18:31:56 1999 *************** dump_type_real (t, v, canonical_name) *** 211,216 **** --- 211,221 ---- OB_PUTS ("{unknown type}"); break; + case TREE_LIST: + /* A list of function parms. */ + dump_parameters (t, 0, canonical_name); + break; + case IDENTIFIER_NODE: OB_PUTID (t); break; diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/gcc/cp/lex.c gcc-2.95.1/gcc/cp/lex.c *** gcc-2.95/gcc/cp/lex.c Sun May 30 14:49:12 1999 --- gcc-2.95.1/gcc/cp/lex.c Wed Aug 11 11:36:44 1999 *************** do_identifier (token, parsing, args) *** 2869,2874 **** --- 2869,2882 ---- || TREE_CODE (field) == CONST_DECL || TREE_CODE (field) == TEMPLATE_DECL) id = field; + else if (TREE_CODE (field) == TYPE_DECL + && DECL_ARTIFICIAL (field) + && IMPLICIT_TYPENAME_P (TREE_TYPE (field))) + /* When we did name-lookup before, we will have eschewed + implicit typenames in favor of global bindings. Therefore, + if lookup_field returns an implicit typename, but ID is not + an implicit typename, then we should skip this one, too. */ + ; else if (TREE_CODE (field) != FIELD_DECL) my_friendly_abort (61); else diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/gcc/cp/parse.y gcc-2.95.1/gcc/cp/parse.y *** gcc-2.95/gcc/cp/parse.y Sun May 16 13:55:33 1999 --- gcc-2.95.1/gcc/cp/parse.y Mon Aug 9 03:51:17 1999 *************** function_try_block: *** 3390,3395 **** --- 3390,3396 ---- } ctor_initializer_opt compstmt { + end_protect_partials (); expand_start_all_catch (); } handler_seq diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/gcc/cp/pt.c gcc-2.95.1/gcc/cp/pt.c *** gcc-2.95/gcc/cp/pt.c Wed Jul 14 19:05:36 1999 --- gcc-2.95.1/gcc/cp/pt.c Sun Aug 8 14:03:59 1999 *************** maybe_get_template_decl_from_type_decl ( *** 3574,3579 **** --- 3574,3580 ---- return (decl != NULL_TREE && TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl) + && CLASS_TYPE_P (TREE_TYPE (decl)) && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl))) ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl; } *************** tsubst (t, args, complain, in_decl) *** 6136,6146 **** not PROCESSING_TEMPLATE_DECL. */ || TREE_CODE (max) != INTEGER_CST) { ! tree itype = make_node (INTEGER_TYPE); ! TYPE_MIN_VALUE (itype) = size_zero_node; ! TYPE_MAX_VALUE (itype) = build_min (MINUS_EXPR, sizetype, max, ! integer_one_node); ! return itype; } if (integer_zerop (omax)) --- 6137,6144 ---- not PROCESSING_TEMPLATE_DECL. */ || TREE_CODE (max) != INTEGER_CST) { ! return build_index_type (build_min ! (MINUS_EXPR, sizetype, max, integer_one_node)); } if (integer_zerop (omax)) *************** do_decl_instantiation (declspecs, declar *** 8912,8919 **** No program shall both explicitly instantiate and explicitly specialize a template. */ ! cp_error ("explicit instantiation of `%#D' after", result); ! cp_error_at ("explicit specialization here", result); return; } else if (DECL_EXPLICIT_INSTANTIATION (result)) --- 8910,8917 ---- No program shall both explicitly instantiate and explicitly specialize a template. */ ! cp_pedwarn ("explicit instantiation of `%#D' after", result); ! cp_pedwarn_at ("explicit specialization here", result); return; } else if (DECL_EXPLICIT_INSTANTIATION (result)) *************** do_decl_instantiation (declspecs, declar *** 8927,8933 **** first instantiation was `extern' and the second is not, and EXTERN_P for the opposite case. */ if (DECL_INTERFACE_KNOWN (result) && !extern_p) ! cp_error ("duplicate explicit instantiation of `%#D'", result); /* If we've already instantiated the template, just return now. */ if (DECL_INTERFACE_KNOWN (result)) --- 8925,8931 ---- first instantiation was `extern' and the second is not, and EXTERN_P for the opposite case. */ if (DECL_INTERFACE_KNOWN (result) && !extern_p) ! cp_pedwarn ("duplicate explicit instantiation of `%#D'", result); /* If we've already instantiated the template, just return now. */ if (DECL_INTERFACE_KNOWN (result)) diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/gcc/cp/typeck.c gcc-2.95.1/gcc/cp/typeck.c *** gcc-2.95/gcc/cp/typeck.c Fri May 21 08:44:03 1999 --- gcc-2.95.1/gcc/cp/typeck.c Mon Aug 9 01:46:20 1999 *************** comp_target_parms (parms1, parms2, stric *** 1355,1362 **** if (t1 == 0 && t2 != 0) { ! cp_pedwarn ("ANSI C++ prohibits conversion from `(%#T)' to `(...)'", ! parms2); return self_promoting_args_p (t2); } if (t2 == 0) --- 1355,1367 ---- if (t1 == 0 && t2 != 0) { ! if (! flag_strict_prototype && t2 == void_list_node) ! /* t1 might be the arglist of a function pointer in extern "C" ! declared to take (), which we fudged to (...). Don't make the ! user pay for our mistake. */; ! else ! cp_pedwarn ("ANSI C++ prohibits conversion from `%#T' to `(...)'", ! parms2); return self_promoting_args_p (t2); } if (t2 == 0) *************** build_x_modify_expr (lhs, modifycode, rh *** 6360,6366 **** /* Get difference in deltas for different pointer to member function types. Return integer_zero_node, if FROM cannot be converted to a ! TO type. If FORCE is true, then allow reverse conversions as well. */ static tree get_delta_difference (from, to, force) --- 6365,6376 ---- /* Get difference in deltas for different pointer to member function types. Return integer_zero_node, if FROM cannot be converted to a ! TO type. If FORCE is true, then allow reverse conversions as well. ! ! Note that the naming of FROM and TO is kind of backwards; the return ! value is what we add to a TO in order to get a FROM. They are named ! this way because we call this function to find out how to convert from ! a pointer to member of FROM to a pointer to member of TO. */ static tree get_delta_difference (from, to, force) *************** expand_ptrmemfunc_cst (cst, delta, idx, *** 6618,6655 **** { tree type = TREE_TYPE (cst); tree fn = PTRMEM_CST_MEMBER (cst); my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 0); ! ! *delta ! = get_delta_difference (TYPE_METHOD_BASETYPE ! (TREE_TYPE (fn)), ! TYPE_PTRMEMFUNC_OBJECT_TYPE (type), ! /*force=*/0); if (!DECL_VIRTUAL_P (fn)) { ! *idx = size_binop (MINUS_EXPR, integer_zero_node, ! integer_one_node); ! *pfn = build_addr_func (fn); ! if (!same_type_p (TYPE_METHOD_BASETYPE (TREE_TYPE (fn)), ! TYPE_PTRMEMFUNC_OBJECT_TYPE (type))) ! *pfn = build1 (NOP_EXPR, TYPE_PTRMEMFUNC_FN_TYPE (type), ! *pfn); *delta2 = NULL_TREE; } else { ! *idx = size_binop (PLUS_EXPR, DECL_VINDEX (fn), ! integer_one_node); *pfn = NULL_TREE; ! *delta2 = get_binfo (DECL_CONTEXT (fn), ! DECL_CLASS_CONTEXT (fn), ! 0); ! *delta2 = get_vfield_offset (*delta2); ! *delta2 = size_binop (PLUS_EXPR, *delta2, ! build_binary_op (PLUS_EXPR, ! *delta, ! integer_zero_node)); } } --- 6628,6668 ---- { tree type = TREE_TYPE (cst); tree fn = PTRMEM_CST_MEMBER (cst); + tree ptr_class, fn_class; my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 0); ! ! /* The class that the function belongs to. */ ! fn_class = DECL_CLASS_CONTEXT (fn); ! ! /* The class that we're creating a pointer to member of. */ ! ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type); ! ! /* First, calculate the adjustment to the function's class. */ ! *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0); ! if (!DECL_VIRTUAL_P (fn)) { ! *idx = size_binop (MINUS_EXPR, integer_zero_node, integer_one_node); ! *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn)); *delta2 = NULL_TREE; } else { ! /* If we're dealing with a virtual function, we have to adjust 'this' ! again, to point to the base which provides the vtable entry for ! fn; the call will do the opposite adjustment. */ ! tree orig_class = DECL_VIRTUAL_CONTEXT (fn); ! tree binfo = binfo_or_else (orig_class, fn_class); ! *delta = size_binop (PLUS_EXPR, *delta, BINFO_OFFSET (binfo)); ! ! /* Map everything down one to make room for the null PMF. */ ! *idx = size_binop (PLUS_EXPR, DECL_VINDEX (fn), integer_one_node); *pfn = NULL_TREE; ! ! /* Offset from an object of PTR_CLASS to the vptr for ORIG_CLASS. */ ! *delta2 = size_binop (PLUS_EXPR, *delta, ! get_vfield_offset (TYPE_BINFO (orig_class))); } } *************** c_expand_return (retval) *** 7353,7359 **** || DECL_NAME (current_function_decl) == ansi_opname[(int) VEC_NEW_EXPR]) && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl)) && null_ptr_cst_p (retval)) ! cp_pedwarn ("operator new should throw an exception, not return NULL"); if (retval == NULL_TREE) { --- 7366,7372 ---- || DECL_NAME (current_function_decl) == ansi_opname[(int) VEC_NEW_EXPR]) && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl)) && null_ptr_cst_p (retval)) ! cp_warning ("operator new should throw an exception, not return NULL"); if (retval == NULL_TREE) { diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/gcc/cp/typeck2.c gcc-2.95.1/gcc/cp/typeck2.c *** gcc-2.95/gcc/cp/typeck2.c Sat Jul 17 20:48:56 1999 --- gcc-2.95.1/gcc/cp/typeck2.c Sun Aug 8 23:47:02 1999 *************** my_friendly_abort (i) *** 344,350 **** else ack ("Internal compiler error %d.", i); ack ("Please submit a full bug report."); ! ack ("See for instructions."); } else error ("confused by earlier errors, bailing out"); --- 344,350 ---- else ack ("Internal compiler error %d.", i); ack ("Please submit a full bug report."); ! ack ("See for instructions."); } else error ("confused by earlier errors, bailing out"); *************** my_friendly_abort (i) *** 359,365 **** error ("Internal compiler error %d.", i); error ("Please submit a full bug report."); ! fatal ("See for instructions."); } void --- 359,365 ---- error ("Internal compiler error %d.", i); error ("Please submit a full bug report."); ! fatal ("See for instructions."); } void diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libio/ChangeLog gcc-2.95.1/libio/ChangeLog *** gcc-2.95/libio/ChangeLog Wed Jul 28 21:39:49 1999 --- gcc-2.95.1/libio/ChangeLog Mon Aug 16 01:29:52 1999 *************** *** 1,3 **** --- 1,21 ---- + Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com) + + * gcc-2.95.1 Released. + + 1999-08-08 Alexandre Oliva + + * streambuf.h (ios::streamsize): Declare as _IO_ssize_t, as in the + global scope. + + 1999-08-07 Andreas Schwab + + * iostream.cc: Add missing calls to isfx and setup a cleanup + region for the locked stream. + * iostream.h: Likewise. + * isgetline.cc: Likewise. + * isgetsb.cc: Likewise. + * isscan.cc: Likewise. + Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95 Released. diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libio/iostream.cc gcc-2.95.1/libio/iostream.cc *** gcc-2.95/libio/iostream.cc Tue Feb 24 12:09:51 1998 --- gcc-2.95.1/libio/iostream.cc Fri Aug 6 23:01:46 1999 *************** int skip_ws(streambuf* sb) *** 71,76 **** --- 71,78 ---- istream& istream::get(char& c) { if (ipfx1()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); int ch = _strbuf->sbumpc(); if (ch == EOF) { set(ios::eofbit|ios::failbit); *************** istream& istream::get(char& c) *** 80,85 **** --- 82,89 ---- c = (char)ch; _gcount = 1; } + isfx(); + _IO_cleanup_region_end (0); } else _gcount = 0; *************** istream& istream::ignore(int n /* = 1 */ *** 102,111 **** { _gcount = 0; if (ipfx1()) { register streambuf* sb = _strbuf; if (delim == EOF) { _gcount = sb->ignore(n); ! return *this; } for (;;) { #if 0 --- 106,117 ---- { _gcount = 0; if (ipfx1()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); register streambuf* sb = _strbuf; if (delim == EOF) { _gcount = sb->ignore(n); ! goto unlock; } for (;;) { #if 0 *************** istream& istream::ignore(int n /* = 1 */ *** 122,127 **** --- 128,136 ---- if (ch == delim) break; } + unlock: + isfx(); + _IO_cleanup_region_end (0); } return *this; } *************** istream& istream::ignore(int n /* = 1 */ *** 129,137 **** --- 138,150 ---- istream& istream::read(char *s, streamsize n) { if (ipfx1()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); _gcount = _strbuf->sgetn(s, n); if (_gcount != n) set(ios::failbit|ios::eofbit); + isfx(); + _IO_cleanup_region_end (0); } else _gcount = 0; *************** streampos istream::tellg() *** 184,194 **** --- 197,211 ---- istream& istream::operator>>(char& c) { if (ipfx0()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); int ch = _strbuf->sbumpc(); if (ch == EOF) set(ios::eofbit|ios::failbit); else c = (char)ch; + isfx(); + _IO_cleanup_region_end (0); } return *this; } *************** istream::operator>> (char* ptr) *** 200,205 **** --- 217,224 ---- int w = width(0); if (ipfx0()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); register streambuf* sb = _strbuf; for (;;) { *************** istream::operator>> (char* ptr) *** 219,224 **** --- 238,245 ---- } if (p == ptr) set(ios::failbit); + isfx(); + _IO_cleanup_region_end (0); } *p = '\0'; return *this; *************** static int read_int(istream& stream, uns *** 234,239 **** --- 255,263 ---- { if (!stream.ipfx0()) return 0; + int retval; + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + stream._strbuf); register streambuf* sb = stream.rdbuf(); int base = 10; int ndigits = 0; *************** static int read_int(istream& stream, uns *** 254,260 **** ch = sb->sbumpc(); if (ch == EOF) { val = 0; ! return 1; } if (ch == 'x' || ch == 'X') { base = 16; --- 278,284 ---- ch = sb->sbumpc(); if (ch == EOF) { val = 0; ! goto unlock; } if (ch == 'x' || ch == 'X') { base = 16; *************** static int read_int(istream& stream, uns *** 290,308 **** if (ndigits == 0) goto fail; else ! return 1; } ndigits++; val = base * val + digit; ch = sb->sbumpc(); } ! return 1; fail: stream.set(ios::failbit); ! return 0; eof_fail: stream.set(ios::failbit|ios::eofbit); ! return 0; } #define READ_INT(TYPE) \ --- 314,339 ---- if (ndigits == 0) goto fail; else ! goto unlock; } ndigits++; val = base * val + digit; ch = sb->sbumpc(); } ! unlock: ! retval = 1; ! goto out; fail: stream.set(ios::failbit); ! retval = 0; ! goto out; eof_fail: stream.set(ios::failbit|ios::eofbit); ! retval = 0; ! out: ! stream.isfx(); ! _IO_cleanup_region_end (0); ! return retval; } #define READ_INT(TYPE) \ *************** istream& istream::operator>>(long double *** 334,339 **** --- 365,372 ---- { if (ipfx0()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); #if _G_HAVE_LONG_DOUBLE_IO scan("%Lg", &x); #else *************** istream& istream::operator>>(long double *** 341,346 **** --- 374,381 ---- scan("%lg", &y); x = y; #endif + isfx(); + _IO_cleanup_region_end (0); } return *this; } *************** istream& istream::operator>>(long double *** 348,367 **** --- 383,416 ---- istream& istream::operator>>(double& x) { if (ipfx0()) + { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); scan("%lg", &x); + isfx(); + _IO_cleanup_region_end (0); + } return *this; } istream& istream::operator>>(float& x) { if (ipfx0()) + { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); scan("%g", &x); + isfx(); + _IO_cleanup_region_end (0); + } return *this; } istream& istream::operator>>(register streambuf* sbuf) { if (ipfx0()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); register streambuf* inbuf = rdbuf(); // FIXME: Should optimize! for (;;) { *************** istream& istream::operator>>(register st *** 375,380 **** --- 424,431 ---- break; } } + isfx(); + _IO_cleanup_region_end (0); } return *this; } *************** ostream& ostream::operator<<(const char *** 789,796 **** if (flags() & ios::left && padding > 0) // Left adjustment. if (_IO_padn(sbuf, fill_char, padding) != padding) set(ios::badbit); - osfx(); failed: _IO_cleanup_region_end (0); } return *this; --- 840,847 ---- if (flags() & ios::left && padding > 0) // Left adjustment. if (_IO_padn(sbuf, fill_char, padding) != padding) set(ios::badbit); failed: + osfx(); _IO_cleanup_region_end (0); } return *this; diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libio/iostream.h gcc-2.95.1/libio/iostream.h *** gcc-2.95/libio/iostream.h Tue Sep 16 09:00:28 1997 --- gcc-2.95.1/libio/iostream.h Fri Aug 6 23:01:46 1999 *************** protected: *** 173,178 **** --- 173,179 ---- int get() { if (!ipfx1()) return EOF; else { int ch = _strbuf->sbumpc(); if (ch == EOF) set(ios::eofbit); + isfx(); return ch; } } int peek(); diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libio/isgetline.cc gcc-2.95.1/libio/isgetline.cc *** gcc-2.95/libio/isgetline.cc Sun Apr 19 14:14:32 1998 --- gcc-2.95.1/libio/isgetline.cc Fri Aug 6 23:01:46 1999 *************** istream& istream::getline(char* buf, int *** 37,42 **** --- 37,44 ---- int ch; if (ipfx1()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); streambuf *sb = rdbuf(); _gcount = _IO_getline_info(sb, buf, len - 1, delim, -1, &ch); if (ch != EOF) *************** istream& istream::getline(char* buf, int *** 48,53 **** --- 50,57 ---- set(ios::failbit); sb->sungetc(); // Leave delimiter unread. } + isfx(); + _IO_cleanup_region_end (0); } else ch = EOF; *************** istream& istream::get(char* buf, int len *** 67,77 **** --- 71,85 ---- } if (ipfx1()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); streambuf *sbuf = rdbuf(); int ch; _gcount = _IO_getline_info(sbuf, buf, len - 1, delim, -1, &ch); if (_gcount == 0 && ch == EOF) set(ios::failbit|ios::eofbit); + isfx(); + _IO_cleanup_region_end (0); } buf[_gcount] = '\0'; return *this; *************** char *_sb_readline (streambuf *sb, long& *** 123,128 **** --- 131,138 ---- istream& istream::gets(char **s, char delim /* = '\n' */) { if (ipfx1()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); long size = 0; streambuf *sb = rdbuf(); *s = _sb_readline (sb, size, delim); *************** istream& istream::gets(char **s, char de *** 132,137 **** --- 142,149 ---- if (_gcount == 0) set(ios::failbit); } + isfx(); + _IO_cleanup_region_end (0); } else { _gcount = 0; diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libio/isgetsb.cc gcc-2.95.1/libio/isgetsb.cc *** gcc-2.95/libio/isgetsb.cc Thu Aug 21 15:58:19 1997 --- gcc-2.95.1/libio/isgetsb.cc Fri Aug 6 23:01:46 1999 *************** istream& istream::get(streambuf& sb, cha *** 31,36 **** --- 31,38 ---- _gcount = 0; if (ipfx1()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); register streambuf* isb = rdbuf(); for (;;) { *************** istream& istream::get(streambuf& sb, cha *** 54,59 **** --- 56,63 ---- if (delimp != NULL) break; } + isfx(); + _IO_cleanup_region_end (0); } return *this; } diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libio/isscan.cc gcc-2.95.1/libio/isscan.cc *** gcc-2.95/libio/isscan.cc Thu Aug 21 15:58:19 1997 --- gcc-2.95.1/libio/isscan.cc Fri Aug 6 23:01:46 1999 *************** the executable file might be covered by *** 29,38 **** --- 29,42 ---- istream& istream::scan(const char *format ...) { if (ipfx0()) { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); va_list ap; va_start(ap, format); _strbuf->vscan(format, ap, this); va_end(ap); + isfx(); + _IO_cleanup_region_end (0); } return *this; } *************** istream& istream::scan(const char *forma *** 40,45 **** --- 44,55 ---- istream& istream::vscan(const char *format, _IO_va_list args) { if (ipfx0()) + { + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, + _strbuf); _strbuf->vscan(format, args, this); + isfx(); + _IO_cleanup_region_end (0); + } return *this; } diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libio/stdio/ChangeLog gcc-2.95.1/libio/stdio/ChangeLog *** gcc-2.95/libio/stdio/ChangeLog Wed Jul 28 21:39:49 1999 --- gcc-2.95.1/libio/stdio/ChangeLog Mon Aug 16 01:29:53 1999 *************** *** 1,3 **** --- 1,7 ---- + Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com) + + * gcc-2.95.1 Released. + Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95 Released. diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libio/streambuf.h gcc-2.95.1/libio/streambuf.h *** gcc-2.95/libio/streambuf.h Thu Apr 29 01:32:13 1999 --- gcc-2.95.1/libio/streambuf.h Sun Aug 8 17:07:01 1999 *************** class ios : public _ios_fields { *** 130,136 **** typedef __fmtflags fmtflags; typedef int iostate; typedef int openmode; ! typedef int streamsize; enum io_state { goodbit = _IOS_GOOD, eofbit = _IOS_EOF, --- 130,136 ---- typedef __fmtflags fmtflags; typedef int iostate; typedef int openmode; ! typedef _IO_ssize_t streamsize; enum io_state { goodbit = _IOS_GOOD, eofbit = _IOS_EOF, diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libio/tests/ChangeLog gcc-2.95.1/libio/tests/ChangeLog *** gcc-2.95/libio/tests/ChangeLog Wed Jul 28 21:39:49 1999 --- gcc-2.95.1/libio/tests/ChangeLog Mon Aug 16 01:29:53 1999 *************** *** 1,3 **** --- 1,7 ---- + Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com) + + * gcc-2.95.1 Released. + Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95 Released. diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libio/testsuite/ChangeLog gcc-2.95.1/libio/testsuite/ChangeLog *** gcc-2.95/libio/testsuite/ChangeLog Wed Jul 28 21:39:50 1999 --- gcc-2.95.1/libio/testsuite/ChangeLog Mon Aug 16 01:29:53 1999 *************** *** 1,3 **** --- 1,7 ---- + Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com) + + * gcc-2.95.1 Released. + Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95 Released. diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libstdc++/ChangeLog gcc-2.95.1/libstdc++/ChangeLog *** gcc-2.95/libstdc++/ChangeLog Wed Jul 28 21:39:50 1999 --- gcc-2.95.1/libstdc++/ChangeLog Mon Aug 16 01:29:54 1999 *************** *** 1,3 **** --- 1,19 ---- + Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com) + + * gcc-2.95.1 Released. + + Thu Aug 5 02:00:13 1999 Loren Rittle + + * Makefile.in (MARLINK, MSHLINK): Handle library version + number components with more than one numeric digit. + + Mon Aug 2 00:40:10 1999 Jeffrey A Law (law@cygnus.com) + + 1999-07-16 Markus Gyger (mgyger@gmu.edu) + * stdexcepti.cc (__out_of_range): Use std:: qualifier for names + in std. + (__length_error): Likewise. + Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95 Released. diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libstdc++/Makefile.in gcc-2.95.1/libstdc++/Makefile.in *** gcc-2.95/libstdc++/Makefile.in Sat Jul 17 22:50:47 1999 --- gcc-2.95.1/libstdc++/Makefile.in Thu Aug 5 01:00:40 1999 *************** HEADERS= cassert cctype cerrno cfloat ci *** 32,42 **** ARLIB = libstdc++.a.$(VERSION) ARLINK = libstdc++.a ! MARLINK = libstdc++.a.`echo $(VERSION) | sed 's/\([0-9][.][0-9]\).*/\1/'` SHLIB = libstdc++.so.$(VERSION) SHARLIB = libstdc++-sh.a SHLINK = libstdc++.so ! MSHLINK = libstdc++.so.`echo $(VERSION) | sed 's/\([0-9][.][0-9]\).*/\1/'` SHFLAGS = SHDEPS = --- 32,42 ---- ARLIB = libstdc++.a.$(VERSION) ARLINK = libstdc++.a ! MARLINK = libstdc++.a.`echo $(VERSION) | sed 's/\([0-9]*[.][0-9]*\).*/\1/'` SHLIB = libstdc++.so.$(VERSION) SHARLIB = libstdc++-sh.a SHLINK = libstdc++.so ! MSHLINK = libstdc++.so.`echo $(VERSION) | sed 's/\([0-9]*[.][0-9]*\).*/\1/'` SHFLAGS = SHDEPS = diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libstdc++/stdexcepti.cc gcc-2.95.1/libstdc++/stdexcepti.cc *** gcc-2.95/libstdc++/stdexcepti.cc Thu Oct 9 23:56:52 1997 --- gcc-2.95.1/libstdc++/stdexcepti.cc Sun Aug 1 23:41:14 1999 *************** *** 12,21 **** void __out_of_range (const char *s) { ! throw out_of_range (s); } void __length_error (const char *s) { ! throw length_error (s); } --- 12,21 ---- void __out_of_range (const char *s) { ! throw std::out_of_range (s); } void __length_error (const char *s) { ! throw std::length_error (s); } diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libstdc++/stl/ChangeLog gcc-2.95.1/libstdc++/stl/ChangeLog *** gcc-2.95/libstdc++/stl/ChangeLog Wed Jul 28 21:39:50 1999 --- gcc-2.95.1/libstdc++/stl/ChangeLog Mon Aug 16 01:29:54 1999 *************** *** 1,3 **** --- 1,12 ---- + Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com) + + * gcc-2.95.1 Released. + + Sun Aug 8 21:06:16 1999 Alexandre Oliva + + * pthread_alloc: Solaris' ctype.h defines _U to 01; use _Up as + template parameter instead. + Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95 Released. diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libstdc++/stl/pthread_alloc gcc-2.95.1/libstdc++/stl/pthread_alloc *** gcc-2.95/libstdc++/stl/pthread_alloc Wed Sep 2 10:24:37 1998 --- gcc-2.95.1/libstdc++/stl/pthread_alloc Sun Aug 8 17:07:05 1999 *************** public: *** 376,388 **** typedef const _Tp& const_reference; typedef _Tp value_type; ! template struct rebind { ! typedef pthread_allocator<_U> other; }; pthread_allocator() __STL_NOTHROW {} pthread_allocator(const pthread_allocator& a) __STL_NOTHROW {} ! template pthread_allocator(const pthread_allocator<_U>&) __STL_NOTHROW {} ~pthread_allocator() __STL_NOTHROW {} --- 376,388 ---- typedef const _Tp& const_reference; typedef _Tp value_type; ! template struct rebind { ! typedef pthread_allocator<_Up> other; }; pthread_allocator() __STL_NOTHROW {} pthread_allocator(const pthread_allocator& a) __STL_NOTHROW {} ! template pthread_allocator(const pthread_allocator<_Up>&) __STL_NOTHROW {} ~pthread_allocator() __STL_NOTHROW {} *************** public: *** 416,423 **** typedef const void* const_pointer; typedef void value_type; ! template struct rebind { ! typedef pthread_allocator<_U> other; }; }; --- 416,423 ---- typedef const void* const_pointer; typedef void value_type; ! template struct rebind { ! typedef pthread_allocator<_Up> other; }; }; *************** struct _Alloc_traits<_Tp, _Pthread_alloc *** 451,466 **** allocator_type; }; ! template ! struct _Alloc_traits<_Tp, __allocator<_U, _Pthread_alloc_template<_Max> > > { static const bool _S_instanceless = true; typedef simple_alloc<_Tp, _Pthread_alloc_template<_Max> > _Alloc_type; typedef __allocator<_Tp, _Pthread_alloc_template<_Max> > allocator_type; }; ! template ! struct _Alloc_traits<_Tp, pthread_allocator<_U> > { static const bool _S_instanceless = true; typedef simple_alloc<_Tp, _Pthread_alloc_template<> > _Alloc_type; --- 451,466 ---- allocator_type; }; ! template ! struct _Alloc_traits<_Tp, __allocator<_Up, _Pthread_alloc_template<_Max> > > { static const bool _S_instanceless = true; typedef simple_alloc<_Tp, _Pthread_alloc_template<_Max> > _Alloc_type; typedef __allocator<_Tp, _Pthread_alloc_template<_Max> > allocator_type; }; ! template ! struct _Alloc_traits<_Tp, pthread_allocator<_Up> > { static const bool _S_instanceless = true; typedef simple_alloc<_Tp, _Pthread_alloc_template<> > _Alloc_type; diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libstdc++/tests/ChangeLog gcc-2.95.1/libstdc++/tests/ChangeLog *** gcc-2.95/libstdc++/tests/ChangeLog Wed Jul 28 21:39:50 1999 --- gcc-2.95.1/libstdc++/tests/ChangeLog Mon Aug 16 01:29:54 1999 *************** *** 1,3 **** --- 1,7 ---- + Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com) + + * gcc-2.95.1 Released. + Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95 Released. diff -x de.gmo -x fr.gmo -Nrc3p gcc-2.95/libstdc++/testsuite/ChangeLog gcc-2.95.1/libstdc++/testsuite/ChangeLog *** gcc-2.95/libstdc++/testsuite/ChangeLog Wed Jul 28 21:39:51 1999 --- gcc-2.95.1/libstdc++/testsuite/ChangeLog Mon Aug 16 01:29:54 1999 *************** *** 1,3 **** --- 1,7 ---- + Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com) + + * gcc-2.95.1 Released. + Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95 Released.