Issue Details (XML | Word | Printable)

Key: STDCXX-645
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Martin Sebor
Reporter: Mark Brown
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
C++ Standard Library

stream iterators into different streams compare equal

Created: 03/Nov/07 04:07 PM   Updated: 22/Apr/08 03:55 AM
Return to search
Component/s: 24. Iterators
Affects Version/s: 4.1.3, 4.2.0
Fix Version/s: 4.2.1

Time Tracking:
Original Estimate: 2h
Original Estimate - 2h
Remaining Estimate: 0h
Time Spent - 8h
Time Spent: 8h
Time Spent - 8h

File Attachments:
  Size
File Licensed for inclusion in ASF works c++std-lib-20221.eml 2008-02-06 04:42 AM Martin Sebor 5 kB
Issue Links:
Dependants
 

Severity: Incorrect Behavior
Resolved: 06/Feb/08 04:36 AM
Resolution Date: 07/Feb/08 12:21 AM


 Description  « Hide
As Travis says in his reply to my post here:
http://www.nabble.com/stream-iterators-into-different-streams-compare-equal--tf4721505.html#a13498487:

Given 24.5.1.1 p1 and p2, it is pretty clear to me that the two iterators are both non-end-of-stream type, and they are both created on different streams. The streams are different, so the iterators should not compare equal. I guess one could claim that 24.5.1.2 p6 conflicts with 24.5 p3 because 'end-of-stream' isn't clearly defined, but in this particular case that doesn't matter.

This program aborts with stdcxx but not with gcc:

#include <assert.h>
#include <iterator>
#include <sstream>

int main ()
{
    std::istringstream a ("1");
    std::istream_iterator<int> i (a);

    std::istringstream b ("2");
    std::istream_iterator<int> j (b);

    assert (!(i == j));
}


 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Mark Brown added a comment - 03/Nov/07 04:11 PM
The patch is simple:

— /home/mbrown/stdcxx/include/rw/_streamiter.h 2007-03-27 22:32:05.000000000 -0600
+++ /home/mbrown/stdcxx-4.2.0/include/rw/_streamiter.h 2007-11-03 10:08:55.000000000 -0600
@@ -121,7 +121,7 @@
operator== (const istream_iterator<_TypeT, _CharT, _Traits, _Distance>& __x,
const istream_iterator<_TypeT, _CharT, _Traits, _Distance>& __y)

{ - return (__x._C_strm && !!*__x._C_strm) == (__y._C_strm && !!*__y._C_strm); + return __x._C_strm == __y._C_strm; }

Mark Brown made changes - 03/Nov/07 04:11 PM
Field Original Value New Value
Patch Info [Patch Available]
Travis Vitek added a comment - 16/Nov/07 07:30 PM - edited
24.5.1 p1 says that an istream_iterator becomes an end-of-stream iterator when the end of stream is reached. So checks are required so that two iterators that become end-of-stream iterators will compare equal.

#include <assert.h>
#include <iterator>
#include <sstream>

int main ()
{
std::istringstream a ("1");
std::istream_iterator<int> i (a);
++i;

std::istringstream b ("2");
std::istream_iterator<int> j (b);
++j;

assert (i == j);

return 0;
}

This method needs to return true if both iterators are end-of-stream iterators, or they have the same non-null stream pointer. Something like this is more appropriate given the implementation of the other methods

template <class _TypeT, class _CharT, class _Traits, class _Distance>
bool
operator== (const istream_iterator<_TypeT, _CharT, _Traits, _Distance>& __x,
const istream_iterator<_TypeT, _CharT, _Traits, _Distance>& __y)
{
if (__x._C_strm != __y._C_strm) { const bool __x_eos = !__x._C_strm || !*__x._C_strm; const bool __y_eos = !__y._C_strm || !*__y._C_strm; // iterators on different streams equal iff they are both eos return __x_eos && __y_eos; }

return true; // iterators on same stream are always equal
}

The other option would be to change our internal definition of end-of-stream to be istream_iterators with a NULL stream pointer. Then operator++ could be changed to invalidate the stream pointer when the stream reaches eos. I think this would work.

istream_iterator& operator++ () {
if (_C_strm && !!*_C_strm)
*_C_strm >> _C_val;
else
_C_strm = 0;
return *this;
}


Martin Sebor made changes - 19/Nov/07 05:55 AM
Link This issue blocks STDCXX-321 [ STDCXX-321 ]
Martin Sebor added a comment - 28/Nov/07 05:44 AM
Good catch! I thought these checks were already in place but I see they're not.

IMO, the decision where to add them should be made with an eye toward minimizing the performance penalty in the common case. I.e., what's more likely to be called more often: the equality operator or the increment operator on an iterator?


Travis Vitek added a comment - 28/Nov/07 08:30 PM
In most cases the iterator is going to be used in a loop which calls op!= and op++ repeatedly. In this case op== would get called one time more than op+. Of course there are some scenerios where op+ is called more frequently than op== [std::distance or std::advance], but I don't believe that those are the most common use cases for an istream_iterator.

If we fix op+, then op== becomes a pointer comparison and op+ gets an additional assignment. I think fixing op++ would be the preferred solution if we are just counting instructions.


Martin Sebor added a comment - 28/Nov/07 09:36 PM
I would have been tempted to say that operator==() will be called much more often than operator++(). I looked at num_get and money_get (both of which actually use istreambuf_iterator, not istream_iterator), to see if I could find any support for my hypothesis. Here's what I found:

num_get calls both functions exactly once in each iteration of the loop. It also dereferences the iterator exactly once. There is exactly one such call for each of the operators in the body of the loop.

money_get makes up to four calls to operator++() and operator*() in each iteration, and five calls to operator==() (or the inverse of it). There are four and five call sites, respectively, for the functions.

If we can draw any conclusion out of this at all it would seem to be slightly in favor of keeping operator==() light-weight and adding the checking logic to operator++().


Martin Sebor added a comment - 10/Jan/08 03:52 AM
I've been looking into this and I think either there's a real issue in the standard or the text is confusing. My post on the subject to the committee's list is below. The confusing part is that [istream.iterator], p1, duplicates a couple of preconditions for istream_iterator operations (operator*() and operator->()) from Table 96, Input Iterator Requirements, but not others, notably operator+(). This could mean that istream_operator::operator+() is well-defined for end-of-stream iterators or it could be just another piece of redundant text in the standard...

-------- Original Message --------
Subject: can an end-of-stream iterator become a non-end-of-stream one?
Date: Wed, 09 Jan 2008 16:08:52 -0700
From: Martin Sebor <sebor@roguewave.com>
Reply-To: c++std-lib@accu.org
Organization: Rogue Wave Software, Inc.
To: undisclosed-recipients:;

To: C++ libraries mailing list
Message c++std-lib-20003

The istream_iterator description says that "If the end of stream is
reached (operator void*() on the stream returns false), the iterator
becomes equal to the end-of-stream iterator value" without explaining
how exactly this is done.

One possible approach used in practice is for the iterator to set its
in_stream pointer to 0 just like the default ctor does. The problem
with this approach is that the Effects clause for operator++() says
the iterator unconditionally extracts the next value from the stream
by evaluating:

*in_stream >> value;

This can be easily detected by a program setting eofbit or failbit
in exceptions of the associated stream and iterating past the end
of the stream (each past-the-end read should trigger an exception).

Another approach, one that would allow operator++() to attempt to
extract the value even for end-of-stream (EOS) iterators (just as
long as in_stream is non-0) is for the iterator to maintain a flag
indicating whether it has reached the end of the stream. This
approach, however, even though it's also used in practice, isn't
supported by the exposition-only members of the class (no such flag
is shown).

The question then: Is it the intent that a non-EOS that has reached
the EOS become a non-EOS one again after the stream's eofbit flag
has been cleared? I.e., are the assertions in the program below
expected to pass?

sstream strm ("1 ");
istream_iterator eos;
istream_iterator it (strm);
int i;
i = *it++
assert (it == eos);
strm.clear ();
strm << "2 3 ";
assert (it != eos);
i = *++it;
assert (3 == i);

Or is it intended that once an iterator becomes EOS it stays EOS until
the end of its lifetime?

Martin


Martin Sebor logged work - 10/Jan/08 07:00 AM
Time Worked: 2h
Worked on a fix and a unit test.
Martin Sebor made changes - 01/Feb/08 05:07 PM
Assignee Martin Sebor [ sebor ]
Martin Sebor logged work - 06/Feb/08 12:00 AM
Time Worked: 4h
Spent most of the time writing a test.
Martin Sebor added a comment - 06/Feb/08 04:22 AM
Scheduled for 4.2.1, added my initial [under]estimate and enabled code formatting for test case in Description.

Martin Sebor made changes - 06/Feb/08 04:22 AM
Description As Travis says in his reply to my post here:
http://www.nabble.com/stream-iterators-into-different-streams-compare-equal--tf4721505.html#a13498487:

    Given 24.5.1.1 p1 and p2, it is pretty clear to me that the two iterators are both non-end-of-stream type, and they are both created on different streams. The streams are different, so the iterators should not compare equal. I guess one could claim that 24.5.1.2 p6 conflicts with 24.5 p3 because 'end-of-stream' isn't clearly defined, but in this particular case that doesn't matter.

This program aborts with stdcxx but not with gcc:

#include <assert.h>
#include <iterator>
#include <sstream>

int main ()
{
    std::istringstream a ("1");
    std::istream_iterator<int> i (a);

    std::istringstream b ("2");
    std::istream_iterator<int> j (b);

    assert (!(i == j));
}
As Travis says in his reply to my post here:
http://www.nabble.com/stream-iterators-into-different-streams-compare-equal--tf4721505.html#a13498487:

    Given 24.5.1.1 p1 and p2, it is pretty clear to me that the two iterators are both non-end-of-stream type, and they are both created on different streams. The streams are different, so the iterators should not compare equal. I guess one could claim that 24.5.1.2 p6 conflicts with 24.5 p3 because 'end-of-stream' isn't clearly defined, but in this particular case that doesn't matter.

This program aborts with stdcxx but not with gcc:

{code}
#include <assert.h>
#include <iterator>
#include <sstream>

int main ()
{
    std::istringstream a ("1");
    std::istream_iterator<int> i (a);

    std::istringstream b ("2");
    std::istream_iterator<int> j (b);

    assert (!(i == j));
}
{code}
Fix Version/s 4.2.1 [ 12312690 ]
Remaining Estimate 2h [ 7200 ]
Original Estimate 2h [ 7200 ]
Martin Sebor added a comment - 06/Feb/08 04:22 AM
There's no patch here.

Martin Sebor made changes - 06/Feb/08 04:22 AM
Patch Info [Patch Available]
Repository Revision Date User Message
ASF #618878 Wed Feb 06 04:23:49 UTC 2008 sebor 2008-02-05 Martin Sebor <sebor@roguewave.com>

* 24.istream.iterator.cpp: New test exercising [istream.iterator],
including STDCXX-645.
Files Changed
ADD /stdcxx/trunk/tests/iterators/24.istream.iterator.cpp
ADD /stdcxx/trunk/tests/iterators

Repository Revision Date User Message
ASF #618879 Wed Feb 06 04:28:24 UTC 2008 sebor 2008-02-05 Martin Sebor <sebor@roguewave.com>

* 24.istream.iterator.cons.STDCXX-645.cpp: Added a regression
test for STDCXX-645.
Files Changed
ADD /stdcxx/trunk/tests/regress/24.istream.iterator.cons.stdcxx-645.cpp

Repository Revision Date User Message
ASF #618883 Wed Feb 06 04:33:37 UTC 2008 sebor 2008-02-05 Martin Sebor <sebor@roguewave.com>

STDCXX-645
* _streamiter.h (operator++): Tested associated stream for eofbit
rather than (badbit|failbit) as (admittedly somewhat ambiguously)
specifiedn [istream.iterator].
(operator==): Simplified and corrected to compare stream pointers
only without taking the states of the stream objects into account.
Files Changed
MODIFY /stdcxx/trunk/include/rw/_streamiter.h

Martin Sebor added a comment - 06/Feb/08 04:36 AM
Fixed thus: r618883
Regression test added thus: r618878

Martin Sebor made changes - 06/Feb/08 04:36 AM
Status Open [ 1 ] Resolved [ 5 ]
Resolution Fixed [ 1 ]
Martin Sebor made changes - 06/Feb/08 04:38 AM
Time Spent 4h [ 14400 ]
Remaining Estimate 2h [ 7200 ] 0h [ 0 ]
Martin Sebor made changes - 06/Feb/08 04:39 AM
Time Spent 4h [ 14400 ] 6h [ 21600 ]
Martin Sebor added a comment - 06/Feb/08 04:42 AM
Attached proposed fix for the ambiguity in [istream.iterator] submitted to the C++ committee's reflector.

Martin Sebor made changes - 06/Feb/08 04:42 AM
Attachment c++std-lib-20221.eml [ 12374841 ]
Martin Sebor added a comment - 06/Feb/08 10:56 PM
Turns out that having the iterator check ios::fail() rather than ios::eof() is preferred by other implementers and probably makes more sense from a compatibility standpoint (assuming most implementations actually use ios::operator void*() (or equivalent) to decide when to turn a dereferenceable iterator into an end-of-stream one. The new proposed resolution is what made it into LWG issue 788, available for preview here: http://home.twcny.rr.com/hinnant/cpp_extensions/issues_preview/lwg-active.html#788

Reopening to adjust accordingly.


Martin Sebor made changes - 06/Feb/08 10:56 PM
Status Resolved [ 5 ] Reopened [ 4 ]
Resolution Fixed [ 1 ]
Repository Revision Date User Message
ASF #619228 Thu Feb 07 00:16:21 UTC 2008 sebor 2008-02-06 Martin Sebor <sebor@roguewave.com>

STDCXX-645
* include/rw/_streamiter.h (operator*): Checked fail() instead
of eof() on the associated stream before turning the object into
the end-of-stream iterator, as per LWG issue 788.

* tests/iterators/24.istream.iterator.cpp (test_ctors): Inserted
a valid number instead of NUL into test stream.
(test_ops): Changed the expected result of equality comparison
with the end-of-stream iterator according to LWG issue 788.
(opt_char, opt_wchar_t, opt_UserTraits, opt_short, opt_int,
opt_long, opt_double): Added "tri-state" options.
(do_test, run_test, main): Handled said options.
Files Changed
MODIFY /stdcxx/trunk/tests/iterators/24.istream.iterator.cpp
MODIFY /stdcxx/trunk/include/rw/_streamiter.h

Martin Sebor logged work - 07/Feb/08 12:19 AM
Time Worked: 2h
<No comment>
Martin Sebor added a comment - 07/Feb/08 12:19 AM
Fix and test adjusted according to LWG issue 788 in r619228.

Martin Sebor made changes - 07/Feb/08 12:20 AM
Time Spent 6h [ 21600 ] 8h [ 28800 ]
Martin Sebor added a comment - 07/Feb/08 12:21 AM
This time hopefully fixed for good.

Martin Sebor made changes - 07/Feb/08 12:21 AM
Resolution Fixed [ 1 ]
Status Reopened [ 4 ] Resolved [ 5 ]
Repository Revision Date User Message
ASF #648752 Wed Apr 16 17:01:56 UTC 2008 faridz 2008-04-16 Farid Zaripov <farid_zaripov@epam.com>

Merged from trunk the changes for 4.2.1 release.

2008-03-16 Martin Sebor <sebor@roguewave.com>

STDCXX-770
* doc/stdlibref/basic-ios.html (copyfmt): Added Table 40: copyfmt()
Postconditions.
(init): Added Table 41: init() Postconditions.
* doc/stdlibref/lists.html: Added references to Tables 40 and 41.


2008-01-12 William A. Rowe, Jr. <wrowe@apache.com>

* doc/stdlibref/codecvt.html: repos/asf/incubator/stdcxx ->
repos/asf/stdcxx for migration to top level project.


2008-03-27 Scott Zhong <scottz@roguewave.com>

STDCXX-401
* etc/config/makefile.rules (run): Used the POSIX TMPDIR
environment variable instead of TMP.
* etc/config/run_locale_utils.sh: Same.


2008-04-01 Andrew Black <ablack@roguewave.com>

* build/bin/run_utils: Update result footer format to match format
expected by exec utility. Footer search logic changed in r643120.


2008-03-27 Farid Zaripov <farid_zaripov@epam.com>

* etc/config/src/EMPTY_MEM_INITIALIZER.cpp: Replace tab character
to spaces.
* etc/config/src/UNAME.cpp: Ditto.
* examples/manual/bitset.cpp: Ditto.
* examples/manual/codecvt.cpp: Ditto.
* examples/manual/codecvt1.cpp: Ditto.
* examples/manual/generate.cpp: Ditto.
* examples/manual/ifstream.cpp: Ditto.
* examples/manual/istringstream.cpp: Ditto.
* examples/manual/lex_compare.cpp: Ditto.
* examples/manual/max_elem.cpp: Ditto.
* examples/manual/memfunref.cpp: Ditto.
* examples/manual/merge.cpp: Ditto.
* examples/manual/mismatch.cpp: Ditto.
* examples/manual/partition.cpp: Ditto.
* examples/manual/remove.cpp: Ditto.
* examples/tutorial/spell.cpp: Ditto.
* include/loc/_moneypunct.h: Ditto.
* include/loc/_num_get.h: Ditto.
* include/rw/_exception.h: Ditto.
* include/rw/_tree.cc: Ditto.
* include/rw/_tree.h: Ditto.
* include/set: Ditto.
* include/sstream.cc: Ditto.
* src/exception.cpp: Ditto.
* src/ia64/atomic.s: Ditto.
* src/iostream.cpp: Ditto.
* src/iso2022.h: Ditto.
* src/messages.cpp: Ditto.
* src/valarray.cpp: Ditto.
* tests/localization/22.locale.ctype.tolower.cpp: Ditto.
* tests/localization/22.locale.ctype.toupper.cpp: Ditto.
* tests/localization/22.locale.messages.cpp: Ditto.
* tests/numerics/26.class.gslice.cpp: Ditto.
* tests/src/23.containers.cpp: Ditto.
* tests/src/ctype.cpp: Ditto.
* tests/src/locale.cpp: Ditto.
* tests/src/opt_lines.cpp: Ditto.
* util/aliases.cpp: Ditto.
* util/def.h: Ditto.
* util/scanner.cpp: Ditto.
* util/scanner.h: Ditto.


2008-04-04 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-660
* etc/config/src/EQUAL_CTYPE_MASK.cpp: New file to check that ctype
mask's for char and wchar_t are equal.
* src/wctype.cpp [_RWSTD_NO_EQUAL_CTYPE_MASK] (__rw_classic_wide_tab):
Static array with ctype mask's for wide characters.
[_RWSTD_NO_EQUAL_CTYPE_MASK] (__rw_init_classic_wide_tab): New function
to initialize __rw_classic_wide_tab array.
[_RWSTD_NO_EQUAL_CTYPE_MASK] (ctype<wchar_t>::ctype): Initialize
__rw_classic_wide_tab array exactly once using __rw_once().


2008-04-01 Eric Lemings <eric.lemings@roguewave.com>

STDCXX-708
* etc/config/src/float_defs.h: Corrected two #if directives per
suggestions in issue comments.


2008-04-10 Farid Zaripov <farid_zaripov@epam.com>

* etc/config/src/headers.inc: Added checking the <time.h> functions.


2008-04-02 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-740
* etc/config/src/INFINITY.cpp (flt_bits): Fill with zero values
the bits array.
(dbl_bits): Same.
(ldbl_bits): Same.


2008-04-15 Martin Sebor <sebor@roguewave.com>

STDCXX-873
* etc/config/src/libc_decl.sh [vanilla EDG eccp]: Suppressed EDG eccp
error #450-D: the type "long long" is nonstandard before #including
libc headers.


2008-04-01 Andrew Black <ablack@roguewave.com>

* etc/config/windows/run_locale_utils.wsf (run_locale_utils):
Replication of r643435 for Windows. (Update result footer format to
match format expected by exec utility. Footer search logic changed
in r643120.)


2008-03-26 Travis Vitek <vitek@roguewave.com>

STDCXX-715
* etc/nls/countries: New file to map country names and aliases to
the ISO-3166 country code.
* etc/nls/encodings: New file to map codeset names and aliases to
the IANA preferred name.
* etc/nls/languages: New file to map language names and aliases to
the ISO-639-1 language code.


2008-03-31 Travis Vitek <vitek@roguewave.com>

STDCXX-715
* etc/nls/countries: Fix error in countries list.
* etc/nls/languages: Ditto.


2008-04-07 Martin Sebor <sebor@roguewave.com>

STDCXX-831
* exmaples/manual/fmtflags_manip.cpp (fmtflags_manip, saveflags): Avoid
converting -1 to fmtflags due to the unspecified result of the operation
and to silence HP aCC 6 warnings.


2008-03-20 Martin Sebor <sebor@roguewave.com>

STDCXX-789
* examples/manual/random_shuffle.cpp (main): Set fixed floating
point format to suppress the decimal point in iostream output.


2008-03-22 Martin Sebor <sebor@roguewave.com>

STDCXX-768
* include/ansi/climits: Used gcc's #include_next to include
the compiler's <limits.h> header and to prevent the gcc 4.3
error: no include path in which to search for limits.h.


2008-03-22 Martin Sebor <sebor@roguewave.com>

STDCXX-768
* include/ansi/limits.h: Used the gcc extension #include_next to
include the compiler's <limits.h> header and to prevent a gcc 4.3
error: no include path in which to search for limits.h.


2008-03-26 Martin Sebor <sebor@roguewave.com>

* include/ansi/climits [__GNUC__ >= 3]: Silenced gcc warnings
issued for uses of the #include_next extension introduced in
the process of resolving STDCXX-768.


2008-03-16 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-635
* include/deque (operator-): If one of the iterators is the iterator
of the empty deque, return difference between _C_cur data members.


2008-03-16 Farid Zaripov <farid_zaripov@epam.com>

* include/deque (operator-): Privatized names of pointer types.


2008-03-27 Farid Zaripov <farid_zaripov@epam.com>

* include/deque (operator-): Return difference between _C_cur only
if both of iterators are the end-iterators of the empty deque's.


2008-03-31 Martin Sebor <sebor@roguewave.com>

STDCXX-814
* include/iomanip (__rw_setbase): Cast first argument of a shift
expression to unsigned int to avoid benign arithmetic overflow
and silence HP aCC 6 remark #4300: Overflow while computing
constant in left shift operation.
* include/loc/_num_get.cc (num_get::_C_get): Same.
* src/ios.cpp (ios_base::flags): Same.


2008-04-14 Farid Zaripov <farid_zaripov@epam.com>

STDXX-854
* include/loc/_ctype.h (narrow): Don't cast __c to unsigned char,
use __c as index in _C_narrow_tab.


2008-04-07 Martin Sebor <sebor@roguewave.com>

STDCXX-830
* include/loc/_localedef.h [6 <= _RWSTD_HP_aCC_MAJOR]: Suppressed
HP aCC remarks 4298 and 4299 for most of the header since they
don't indicate a problem.


2008-02-13 Martin Sebor <sebor@roguewave.com>

STDCXX-729
* _money_put.cc (_C_put): Worked around an HP aCC 6.15/cadvise
bug causing warning #20200-D: potential null pointer dereference.


2008-02-26 Travis Vitek <vitek@roguewave.com>

* include/loc/_money_put.cc: Eliminate uninitialized variable
warning.


2008-03-31 Martin Sebor <sebor@roguewave.com>

STDCXX-804
* include/ostream (ostream::_C_opfx): Detect and avoid flushing
streams that are tied together or that share the same buffer to
prevent deadlock or infinite recursion.


2008-03-18 Martin Sebor <sebor@roguewave.com>

* include/loc/_num_get.h [LONG_MAX <= SHRT_MAX]
(__rw_check_overflow_short): Silenced unused parameter warnings/remarks.
[LONG_MAX <= INT_MAX] (__rw_check_overflow_int): Same.


2008-03-18 Martin Sebor <sebor@roguewave.com>

* include/loc/_num_get.h: Bumped up year in copyright notice.


2008-03-24 Martin Sebor <sebor@roguewave.com>

STDCXX-748
* include/rw/_array.h (__rw_array::__rw_array): Initialized _C_size
after initializing _C_data to silence a bogus HP aCC 6.16/cadvise
warning #20200-D: Potential null pointer dereference is detected.


2008-03-26 Farid Zaripov <farid_zaripov@epam.com>

* include/rw/_config-gcc.h [__CYGWIN__ && _RWSHARED]: #define
_RWSTD_NO_REPLACEABLE_NEW_DELETE macro to disable using of the
replacement new/delete operators.


2008-04-08 Martin Sebor <sebor@roguewave.com>

STDCXX-843
* include/rw/_mbstate.h [_RWSTD_OS_SUNOS] (__mbstate_t): Used
_RWSTD_LONG_SIZE instead of testing the _LP64 system macro
which may or may not be #defined, depending on the already
#included headers.


2008-03-18 Martin Sebor <sebor@roguewave.com>

STDCXX-595
* include/rw/_mutex.h [_RWSTD_POSIX_THREADS && _RWSTD_EDG_ECCP
&& _RWSTD_OS_LINUX && _RWSTD_NO_LONG_LONG]: Disabled EDG eccp
error #450-D: the type "long long" is nonstandard when using the
vanilla EDG eccp in strict mode (i.e., w/o long long support).


2008-04-15 Farid Zaripov <farid_zaripov@epam.com>

* include/rw/_mutex.h (__rw_atomic_exchange): New overload for bool
type to avoid using of template overload with mutex to atomically
swap two bool's (used in std::ios_base::sync_with_stdio()).


2008-02-05 Martin Sebor <sebor@roguewave.com>

STDCXX-645
* _streamiter.h (operator++): Tested associated stream for eofbit
rather than (badbit|failbit) as (admittedly somewhat ambiguously)
specifiedn [istream.iterator].
(operator==): Simplified and corrected to compare stream pointers
only without taking the states of the stream objects into account.


2008-02-06 Martin Sebor <sebor@roguewave.com>

STDCXX-645
* include/rw/_streamiter.h (operator*): Checked fail() instead
of eof() on the associated stream before turning the object into
the end-of-stream iterator, as per LWG issue 788.
* tests/iterators/24.istream.iterator.cpp (test_ctors): Inserted
a valid number instead of NUL into test stream.
(test_ops): Changed the expected result of equality comparison
with the end-of-stream iterator according to LWG issue 788.
(opt_char, opt_wchar_t, opt_UserTraits, opt_short, opt_int,
opt_long, opt_double): Added "tri-state" options.
(do_test, run_test, main): Handled said options.


2008-02-05 Martin Sebor <sebor@roguewave.com>

* 24.istream.iterator.cpp: New test exercising [istream.iterator],
including STDCXX-645.


2008-04-07 Martin Sebor <sebor@roguewave.com>

* tests/iterators/24.istream.iterator.cpp (test_ops): Parenthesized
subexpression to shut up the annoying HP aCC warning #4259-D: suggest
parentheses around the operands of "!=" and similarly for gcc 4.3.


2008-02-11 Martin Sebor <sebor@roguewave.com>

STDCXX-687
* include/rw/_traits.h [__GNUG__](_RWSTD_MEMCPY, _RWSTD_MEMCMP,
_RWSTD_MEMMOVE, _RWSTD_MEMSET, _RWSTD_STRLEN): #defined macros
to the corresponding gcc __builtins.
[4 < __GNUG__ || 3 <= __GNUC_MINOR__](_RWSTD_MEMCHR): #defined
to __builtin_memchr starting with this version of the compiler.


2008-03-04 Farid Zaripov <farid_zaripov@epam.com>

* include/rw/_traits.h [4 = __GNUG__ && 3 > __GNUC_MINOR__]
(_RWSTD_MEMCHR): #defined to memchr (added missing definition).


2008-04-02 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-799
* include/rw/_traits.h: Don't use gcc string builtins on icc.


2008-03-25 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-795
* include/sstream.cc (str): Save pptr and restore it at the end if
str() is called with internal buffer to increase the capacity of
buffer (i.e. from xsputn() or overflow()).
(xsputn): Remove fix for STDCXX-515 because the pptr now is
preserved in str().


2008-04-07 Martin Sebor <sebor@roguewave.com>

STDCXX-832
* include/string (_C_pref): Used two static_casts in favor of
reinterpret_cast to prevent HP aCC warning #4232: conversion
from "wchar_t*" to a more strictly aligned type.


2008-04-09 Martin Sebor <sebor@roguewave.com>

STDCXX-849
* src/file.cpp [_RWSTD_EDG_ECCP] (stderr, stdin, stdout): Undefined
macros #defined to __rw_stderr, __rw_stdin, and __rw_stdout in our
<stdio.h> to prevent self-initialization to 0 and defined them as
appropriate for Linux and Solaris instead.


2008-04-11 Martin Sebor <sebor@roguewave.com>

* src/file.cpp [_RWSTD_EDG_ECCP]: Fixed a typo in a preprocessing
directive that snuck in with a fix for STDCXX-849 in rev 646568.


2008-03-19 Martin Sebor <sebor@roguewave.com>

STDCXX-766
* src/iostore.cpp (_C_copyfmt): Copied the tied stream and locale.


2008-02-13 Martin Sebor <sebor@roguewave.com>

STDCXX-730
* src/iso2022.cpp (__rw_iso2022jp_designate): Asserted preconditions
to silence HP aCC warning #20200-D: Potential null pointer dereference.
(__rw_ucs4_to_interm): Corrected a bad conditional pointed out by HP
aCC warning #20206-D: Out of bound access.


2008-03-25 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-792
* src/locale_body.cpp (_C_manage): Cast ginit to non-volatile to use
the non-template version of the __rw_atomic_preincrement() if available.
Declare static variable ginit as int instead of long because the all
native atomic functions are defined for int type and the overloads
for long type just calls overload for int type on platforms where
sizeof (int) == sizeof (long).


2008-03-26 Martin Sebor <sebor@roguewave.com>

* src/locale_body.cpp (_C_manage): Used the C++ const_cast to cast
away volatile in favor of the C-style variant introduced in a patch
for STDCXX-792 (rev 640746) to avoid gcc -Wcast-qual warning: cast
from type 'volatile int*' to type 'int*' casts away constness.


2008-04-03 Eric Lemings <eric.lemings@roguewave.com>

STDCXX-811
* src/locale_global.cpp (std::locale::global): Replace call to
non-reentrant setlocale() C function with reentrant
__rw_setlocale object.
* tests/localization/22.locale.statics.mt.cpp (test_global):
Fix [un]signed integer conversion warnings.


2008-04-03 Eric Lemings <eric.lemings@roguewave.com>

STDCXX-811
* src/setlocale.cpp (__rw_setlocale_mutex): Make mutex visible
to other translation units.
* src/locale_global.cpp (std::locale::global): __rw_setlocale
object won't work because destructor restores previous locale.
Guard on mutex and revert to original call to setlocale().


2008-04-04 Farid Zaripov <farid_zaripov@epam.com>

* src/once.cpp (__rw_once): Cast init to int& to avoid using mutex
version of __rw_atomic_preincrement() when atomic version is present.


2008-04-11 Farid Zaripov <farid_zaripov@epam.com>

* src/once.cpp (__rw_once): Cast init to int& to avoid using mutex
version of __rw_atomic_predecrement() when atomic version is present
(see r644662).


2008-04-03 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-824
* src/num_get.cpp (__rw_get_num): If type == _C_pvoid, convert the data
in buf using __rw_strtoull() instead of __rw_strtoul() on LLP64
platforms.


2008-04-09 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-51
* src/num_put.cpp (__rw_isfinite): New function to detect inf and nan
values.
(__rw_signbit): New function to detect the sign of floating point value.
(__rw_isinf): New function to detect inf values.
(__rw_isnan): New function to detect nan values.
(__rw_isqnan): New function to detect quiet nan values.
(__rw_issnan): New function to detect signaling nan values.
(__rw_fmat_infinite): New function to format inf and nan values.
(__rw_put_num): Use __rw_isfinite() and __rw_fmat_infinite() to format
inf and nan values.


2008-04-09 Martin Sebor <sebor@roguewave.com>

* src/num_put.cpp [_RWSTD_OS_SUNOS]: Included <sunmath.h> signbit()
on Solaris. Needed to complete the patch for STDCXX-51 committed in
rev 646396.


2008-04-09 Martin Sebor <sebor@roguewave.com>

* src/num_put.cpp [_RWSTD_OS_SUNOS]: Removed the #inclusion of
<sunmath.h> mistakenly introduced in rev 646597 as the functions
declared in the header are defined in libsunmath that we don't
link with and don't want to start.
[_RWSTD_OS_SUNOS] (__rw_signbit): Reimplemented using simple
integer arithmetic. Needed to complete the patch for STDCXX-51
initially committed in rev 646396.


2008-03-15 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-763
* src/punct.cpp (__rw_get_stdio_fmat): Always use precision in
conversion from floating-point types according to resolution of
the lwg issue 231.


2008-03-26 Martin Sebor <sebor@roguewave.com>

* src/punct.cpp (__rw_get_stdio_fmat): Remove unused
vestigial local variable left behind after resolving
STDCXX-763 in rev 637393.


2008-03-29 Martin Sebor <sebor@roguewave.com>

STDCXX-98
* src/version (#pragma VERSIONID): Worked around an HP aCC 3.63 ICE.


2008-03-31 Martin Sebor <sebor@roguewave.com>

* src/version.cpp (__rw_ident): Updated the name of the library.


2008-03-12 Martin Sebor <sebor@roguewave.com>

STDCXX-435
* src/wcodecvt.cpp (__rw_libc_do_in): Replaces use(s) of mbsrtowcs()
with mbrtowc() to prevent reading past the end of source sequences
that aren't NUL-terminated.


2008-03-12 Martin Sebor <sebor@roguewave.com>

* tests/regress/22.locale.codecvt.STDCXX-435.cpp: Added regression
test for STDCXX-435.


2008-04-09 Travis Vitek <vitek@roguewave.com>

STDCXX-783
* tests/algorithms/25.random.shuffle.cpp (test_random_shuffle): Avoid
indexing past the end of arrays when evaluating rw_assert() arguments
by checking for failure first.


2008-04-11 Travis Vitek <vitek@roguewave.com>

STDCXX-783
* tests/algorithms/25.random.shuffle.cpp (test_random_shuffle): Move
rw_assert() into loop to avoid bogus cadvise warning.


2008-03-31 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-803
* tests/containers/23.bitset.cpp (test_ctors): Declare bmask as
unsigned long to resolve ambiguity on MSVC.


2008-04-07 Martin Sebor <sebor@roguewave.com>

* tests/containers/23.list.cons.cpp (ConsRangePtrOverload): Removed
a pointless const qualifier from the target type of a const_cast to
silence HP aCC warning #2191-D: type qualifier is meaningless on
cast type.
* (test_cons): Cast an argument to the expected type to silence HP
aCC 6 remark #4271-D: type conversion may lose sign.
(main): Removed an unused local variable.


2008-04-07 Travis Vitek <vitek@roguewave.com>

* tests/support/18.support.dynamic.cpp: New test exercising
functions and types for dynamic storage management.
* tests/support/18.support.rtti.cpp: New test exercising
types for dynamic type information support.
* tests/diagnostics/19.std.exceptions.cpp: New test exercising
standard exception types.


2008-04-09 Farid Zaripov <farid_zaripov@epam.com>

* tests/diagnostics/19.std.exceptions.cpp (run_test): Use rw_warn()
instead of rw_assert() on platforms where replacement new/delete
operators can't be defined.


2008-04-14 Farid Zaripov <farid_zaripov@epam.com>

* tests/include/21.strings.h: Removed incorrect overload id.
* tests/src/21.strings.cpp: Ditto.


2008-03-28 Martin Sebor <sebor@roguewave.com>

STDCXX-709
* tests/include/23.containers.h (ContainerTestCaseData): Declared
member pointers non-const for 6.0 <= HP aCC <= 6.16 to work around
a compiler bug.
(ContainerTestCaseData, ~ContainerTestCaseData): Outlined ctor and
dtor to reduce code bloat.


2008-03-28 Martin Sebor <sebor@roguewave.com>

* tests/include/23.containers.h (<driver.h>): Moved an #include
directive from here...
* tests/src/23.containers.cpp: ...to here to reduce namespace
clutter.


2008-04-01 Martin Sebor <sebor@roguewave.com>

* test/include/23.containers.h (~ContainerTestCaseData): Tweaked
a workaround for STDCXX-802 to avoid preprocessor conditionals.


2008-03-29 Martin Sebor <sebor@roguewave.com>

* tests/include/23.list.h (<driver.h>): Added #include directive
after rev 642384 removed it from tests/include/23.containers.h.
(<rw_sigdefs.h>): Moved an include directive outside the scope
of a class and into file scope where it should be.


2008-03-26 Travis Vitek <vitek@roguewave.com>

* tests/src/driver.cpp (rw_enable): Return previous state for the
diagnostic so it can be safely disabled and restored.
* tests/include/driver.h (rw_enable): Ditto. Update comments.


2008-03-28 Travis Vitek <vitek@roguewave.com>

* tests/src/driver.cpp (rw_enable): Reverse logic so that returned
value is correct and consistent with documentation.


2008-03-27 Travis Vitek <vitek@roguewave.com>

STDCXX-716
* tests/include/rw_locale.h (rw_query_locales): Add declaration
of new function.
* tests/src/locale.cpp (atexit_rm_locale_root): Temporarily disable
disgnostic messages to avoid warnings that occur because function is
called after run_test() has returned.
(rw_query_locales): Add new function to query installed locales by
language, country, codeset or MB_CUR_LEN.


2008-03-28 Travis Vitek <vitek@roguewave.com>

STDCXX-714
* tests/src/braceexp.cpp: Remove _rw_isspace(), _rw_isupper() and
_rw_islower(). Use appropriate C library calls instead.
STDCXX-716
* tests/src/locale.cpp: Remove _rw_isspace(), _rw_toupper() and
_rw_tolower(). Use appropriate C library calls instead.


2008-02-17 Travis Vitek <vitek@roguewave.com>

STDCXX-714
* tests/include/rw_braceexp.h: Added a new header to declare the test
suite helper function rw_brace_expand().
* tests/src/braceexp.cpp: New source file to define rw_brace_expand().
* tests/self/0.braceexp.cpp: New test to exercise rw_brace_expand()


2008-02-18 Martin Sebor <sebor@roguewave.com>

* tests/include/rw_braceexp.h: Set svn:eol-style and svn:keywords
properties.
* tests/src/braceexp.cpp: Ditto.
* tests/self/0.braceexp.cpp: Ditto.


2008-02-19 Travis Vitek <vitek@roguewave.com>

* tests/src/braceexp.cpp: Use unsigned values where appropriate
Use change type of seperator to char instead of int. Inlines a
few small functions. General cleanup.
* tests/include/rw_braceexp.h: Ditto. Add documentation for
rw_brace_expand().


2008-02-25 Travis Vitek <vitek@roguewave.com>

STDCXX-714
* tests/include/rw_braceexp.h: Add grammar description for
rw_brace_expand(). Add declaration for rw_shell_expand().
* tests/src/braceexp.cpp: Add helper type _rw_string_buffer
to reduce duplicated code.
(_rw_is_upper): Fix to support EBCDIC encodings.
(_rw_is_upper): Ditto.
(_rw_is_space): Add function to detect whitespace.
(_rw_is_not_space): Add function to detect non whitespace.
(rw_find_match): Add function to find first character that
matches according to some callback function.
(_rw_itoa_10): Add function to write integer values like
sprintf() without dependencies on the locale.
(_rw_find_open_brace): Fix to avoid expanding tokens that
look like shell variable expansions.
(rw_shell_expand): Add function to do shell-like string
tokenization and expansion.
* tests/self/0.braceexp.cpp (run_bash_tests): Removed test.
(run_brace_expand_tests): Add test to verify old function
rw_brace_expand. Updated to expect failures with invalid
expressions.
(run_shell_expand_tests): Add test to verify new function
rw_shell_expand.


2007-12-20 Martin Sebor <sebor@roguewave.com>

STDCXX-683
* tests/include/rw_fnmatch.h: Added a new header declaring
the rw_fnmatch() test suite helper function paralleling the
POSIX function with the same name.
* tests/src/fnmatch.cpp: New source file to define rw_fnmatch().
* 0.fnmatch.cpp: New test to exercise rw_fnmatch().


2008-04-08 Eric Lemings <eric.lemings@roguewave.com>

* tests/iostream/27.istream.fmat.arith.cpp (test_extractor):
Typo.


2008-03-31 Martin Sebor <sebor@roguewave.com>

STDCXX-818
* tests/iostream/27.objects.cpp (operator new): Avoid calling rw_warn()
except when it has something to warn about in case operator new() is
being called by the compiler's C++ runtime (e.g., HP aCC 6.16) before
the driver has been initialized (otherwise the driver aborts).


2008-04-15 Farid Zaripov <farid_zaripov@epam.com>

* tests/localization/22.locale.codecvt.mt.cpp: Use %d format instead
of %zu for printing the number of iterations to avoid printing the
incorrect value on LLP64 platforms).
* tests/localization/22.locale.cons.mt.cpp: Ditto.
* tests/localization/22.locale.ctype.mt.cpp: Ditto.
* tests/localization/22.locale.messages.mt.cpp: Ditto.
* tests/localization/22.locale.money.get.mt.cpp: Ditto.
* tests/localization/22.locale.money.put.mt.cpp: Ditto.
* tests/localization/22.locale.moneypunct.mt.cpp: Ditto.
* tests/localization/22.locale.num.get.mt.cpp: Ditto.
* tests/localization/22.locale.num.put.mt.cpp: Ditto.
* tests/localization/22.locale.numpunct.mt.cpp: Ditto.
* tests/localization/22.locale.statics.mt.cpp: Ditto.
* tests/localization/22.locale.time.get.mt.cpp: Ditto.
* tests/localization/22.locale.time.put.mt.cpp: Ditto.
* tests/strings/21.string.cons.mt.cpp: Ditto.
* tests/strings/21.string.push_back.mt.cpp: Ditto.


2008-01-15 Martin Sebor <sebor@roguewave.com>

STDCXX-700
* tests/localization/22.locale.codecvt.out.cpp (<cstdio>): Removed
#include directive.
(get_mb_chars, find_mb_locale): Replaced calls to std::fprintf()
with rw_fprintf().
* tests/localization/22.locale.time.put.cpp (make_LC_TIME): Silenced
HP aCC 6 warning #2181-D: argument is incompatible with corresponding
format string conversion.
* tests/localization/22.locale.time.put.cpp (make_LC_TIME): Same.
* tests/utilities/20.temp.buffer.mt.cpp (thr_func): Same.
* tests/support/18.numeric.special.int.cpp (Limits<unsigned short>::
compute_digits10): Same.
* util/locale.cpp (print_ce_info, print_charmap): Same.
* util/ctype.cpp (process_sym_ellipsis): Same.


2008-03-31 Travis Vitek <vitek@roguewave.com>

STDCXX-716
* tests/src/locale.cpp: Add functions _rw_isspace(), _rw_toupper() and
_rw_tolower() to avoid problems when sign extending character to int.
(_rw_all_locales): Avoid using uninitialized struct member in calls to
rw_note(). Use _rw_isspace(), _rw_toupper() and _rw_tolower(). Remove
duplicate locales using canonical locale name matching.
(rw_locale_query): Use larger buffer for cached locale name to avoid
buffer overflow. Remember to close file on error condition. Use
_rw_isspace(), _rw_toupper() and _rw_tolower().
* tests/localization/22.locale.ctype.tolower.cpp: Use rw_locale_query()
to select a subset of installed locales.
(run_test): Call test_libc() before test_libstd() to avoid problem with
our locale utility on windows that causes only C locale to be returned.
* tests/localization/22.locale.ctype.toupper.cpp: Ditto.
* tests/localization/22.locale.ctype.scan.cpp: Ditto.
* tests/localization/22.locale.ctype.cpp: Ditto.
* tests/localization/22.locale.ctype.narrow.cpp: Ditto.
* tests/localization/22.locale.ctype.is.cpp: Ditto.
* tests/localization/22.locale.time.get.cpp: Ditto.


2008-04-07 Travis Vitek <vitek@roguewave.com>

* tests/localization/22.locale.ctype.cpp: Cache result of call to
rw_locale_query() reduce time needed to run test.
* tests/localization/22.locale.ctype.is.cpp: Ditto.
* tests/localization/22.locale.ctype.narrow.cpp: Ditto.
* tests/localization/22.locale.ctype.scan.cpp: Ditto.
* tests/localization/22.locale.ctype.toupper.cpp: Ditto.
* tests/localization/22.locale.ctype.tolower.cpp: Ditto.


2008-02-27 Farid Zaripov <farid_zaripov@epam.com>

* tests/localization/22.locale.num.put.cpp
(do_test): Fixed error in format string.
(inf_nan_test): Corrected number of the issue.
(ldbl_test): Added testcase with a precision == 0.


2008-03-15 Farid Zaripov <farid_zaripov@epam.com>

* tests/localization/22.locale.num.put.cpp (dbl_test): Add precision
in format specification of the expected result to reflect the
resolution of the lwg issue 231.
(ldbl_test): Ditto.


2008-03-27 Travis Vitek <vitek@roguewave.com>

* tests/localization/22.locale.time.get.cpp (make_LC_TIME): Add
namespace qualifier to strlen() call to avoid compile error.


2008-03-30 Martin Sebor <sebor@roguewave.com>

STDCXX-4
* tests/localization/22.locale.numpunct.cpp: New test exercising
the required specializations of the std::numpunct facet.


2008-03-30 Martin Sebor <sebor@roguewave.com>

* tests/localization/22.locale.time.put.cpp (make_LC_TIME): Added
an std:: qualification to a call to strlen() missed in rev 604038
to appease strictly conforming compilers such as EDG eccp, or Sun
C++.


2008-03-30 Martin Sebor <sebor@roguewave.com>

* tests/localization/22.locale.time.get.cpp (make_LC_TIME):
Used rw_fatal() to verify postcondition of fopen().


2008-04-01 Travis Vitek <vitek@roguewave.com>

STDCXX-742
* tests/localization/22.locale.messages.cpp (run_test): Avoid
use_facet<>() and has_facet<>() when _RWSTD_NO_DYNAMIC_CAST is
defined.


2008-04-01 Martin Sebor <sebor@roguewave.com>

STDCXX-812
* tests/localization/22.locale.numpunct.mt.cpp [_RWSTD_OS_HP_UX
|| _ILP32] (rw_opt_nlocales): Decreased from the default 16 to
10 in order to work around an HP-UX inefficiency, and renamed
to opt_nlocales to avoid inappropriately using rwtest convention.
* tests/localization/22.locale.time.put.mt.cpp: Same.
* tests/localization/22.locale.num.put.mt.cpp: Same.
* tests/localization/22.locale.ctype.mt.cpp: Same.
* tests/localization/22.locale.money.put.mt.cpp: Same except
that had to go down to 9 to avoid the same inefficiency.
* tests/localization/22.locale.money.get.mt.cpp: Same.


2008-04-02 Martin Sebor <sebor@roguewave.com>

* tests/localization/22.locale.money.put.mt.cpp (rw_opt_nthreads,
rw_opt_nloops, rw_opt_shared_locale): Removed the rw_ prefix from
the names of glabl variables to avoid using rwtest convention.
* tests/localization/22.locale.time.put.mt.cpp: Same.
* tests/localization/22.locale.num.put.mt.cpp: Same.
* tests/localization/22.locale.money.get.mt.cpp: Same.
* tests/localization/22.locale.numpunct.mt.cpp: Same.
(run_test): Added the number of locales to informational output.


2008-04-03 Farid Zaripov <farid_zaripov@epam.com>

* tests/localization/22.locale.num.get.cpp: Silenced warnings on
64-bit MSVC.
(test_pvoid) Correctly exercised overflow conditions on LLP64 platforms.


2008-04-09 Farid Zaripov <farid_zaripov@epam.com>

* tests/localization/22.locale.time.put.cpp (set_TZ): New function
to set TZ environment variable and update the state of the global
CRT variables using tzset().
(test_POSIX): Use set_TZ() instead of rw_putenv(). Use three-letter
time zone name, because the MSVC CRT doesn't supports the time zone
names longer than three letter.


2008-04-10 Farid Zaripov <farid_zaripov@epam.com>

* tests/localization/22.locale.time.put.cpp (set_TZ): Use tzset() only
if it's present in libc.
(test_POSIX): Exercise time zone name of maximum length.


2008-04-11 Farid Zaripov <farid_zaripov@epam.com>

* tests/localization/22.locale.statics.mt.cpp (test_classic): Cast
nthreads to int& to avoid using mutex version of
__rw_atomic_preincrement() when atomic version is present.


2008-04-11 Travis Vitek <vitek@roguewave.com>

STDCXX-779
* tests/localization/22.locale.num.get.cpp: Add new macro T_MAX to
eliminate potential for accessing local variable via pointer after
it has gone out of scope. Remove global pointer pmax.
(do_test): Add new pointer parameter pmax.
(test_flt_uflow): Use new T_MAX macro.
(test_dbl_uflow): Ditto.
(test_ldbl_uflow): Ditto.


2008-04-14 Farid Zaripov <farid_zaripov@epam.com>

* tests/numerics/26.c.math.cpp: Replace rw_any to rw_any_t (caused
compilation error of 26.c.math test on Sun C++ 5.9 / Linux).


2008-04-10 Farid Zaripov <farid_zaripov@epam.com>

* tests/regress/22.locale.codecvt.STDCXX-435.cpp (main): Added
zero element in names array to correctly terminate the loop.


2008-04-07 Eric Lemings <eric.lemings@roguewave.com>

STDCXX-827
* tests/regress/22.locale.STDCXX-554.cpp (test_moneypunct,
test_messages): Use a union containing a pointer to properly
align storage buffer used for placement new operator.


2008-04-01 Farid Zaripov <farid_zaripov@epam.com>

* tests/regress/21.string.insert.STDCXX-630.cpp: Test removed.
This test is added simultaneously (the STDCXX-630 issue is about
assign operation, and test exercises the insert operation).


2008-03-31 Martin Sebor <sebor@roguewave.com>

* tests/regress/27.basic.ios.tie.STDCXX-804.cpp: Added regression
test exercising STDCXX-804.


2008-03-30 Martin Sebor <sebor@roguewave.com>

STDCXX-809
* tests/regress/21.string.STDCXX-162.cpp (MUTEX): Corrected
a typo in the name of the mutex type on Solaris Threads.


2008-03-25 Farid Zaripov <farid_zaripov@epam.com>

* tests/regress/27.stringbuf.overflow.STDCXX-795.cpp: Regression
test for STDCXX-795 issue.


2008-03-19 Martin Sebor <sebor@roguewave.com>

* tests/regress/27.basic.ios.copyfmt.STDCXX-766.cpp: Added
a regression test for STDCXX-766.


2008-02-12 Martin Sebor <sebor@roguewave.com>

* tests/regress/27.filebuf.members.STDCXX-308.cpp: Regression
test exercising STDCXX-308.


2008-02-06 Martin Sebor <sebor@roguewave.com>

* 24.istream.iterator.ops.STDCXX-321.cpp: Added a regression
test for STDCXX-321.


2008-02-05 Martin Sebor <sebor@roguewave.com>

* 24.istream.iterator.cons.STDCXX-645.cpp: Added a regression
test for STDCXX-645.


2008-04-14 Farid Zaripov <farid_zaripov@epam.com>

* tests/strings/21.string.cons.cpp: Exercise the string
ctors overloads with allocator parameter.


2008-04-10 Travis Vitek <vitek@roguewave.com>

STDCXX-774
* tests/strings/21.string.iterators.cpp (test_iterators): Avoid
dereferencing null pointer.


2008-04-04 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-638
* tests/strings/21.cwctype.cpp (test_behavior): Don't check the extra
bits since C99 standard implicitly allows defining extra bits in
iswxxx().
(run_test): Use rw_warn() instead of rw_assert() when
_RWSTD_STRICT_ANSI macro is not #defined when testing the masking
macros and presence of the standard C functions in CRT.


2008-02-29 Travis Vitek <vitek@roguewave.com>

STDCXX-597
* tests/strings/21.string.access.cpp (test_access): Avoid purify
UMR warning when testing for end of string match


2008-02-29 Travis Vitek <vitek@roguewave.com>

* tests/strings/21.string.access.cpp (test_access): Revert previous
change.


2007-11-25 Martin Sebor <sebor@roguewave.com>

* 18.numeric.special.int.cpp: Migrated test for integer specializations
of the std::numeric_limits class template from Rogue Wave test suite.


2008-01-24 Martin Sebor <sebor@roguewave.com>

STDCXX-4
* tests/support/18.numeric.special.float.cpp: Migrated the test to
exercise floating point specializations of the numeric_limits class
template from the Rogue Wave test suite.


2008-01-24 Martin Sebor <sebor@roguewave.com>

* tests/support/18.numeric.special.float.cpp (signaling_NaN):
Corrected typo.
(test_limits): Finished migrating to stdcxx test driver missed
in initial submission (r614980).


2008-03-26 Farid Zaripov <farid_zaripov@epam.com>

* tests/support/18.numeric.special.float.cpp (test_limits):
Added missing parameters for rw_warn().


2008-04-01 Eric Lemings <eric.lemings@roguewave.com>

STDCXX-708
* tests/support/18.numeric.special.float.cpp: Change expected
values for std::numeric_limits<FloatT>::has_denorm() to
std::denorm_present on all HP-UX platforms (inc. PA-RISC and
IPF) per comments recorded in the issue.


2008-03-25 Martin Sebor <sebor@roguewave.com>

STDCXX-615
* tests/tr1.util/2.smartptr.shared.cpp (test_copy_ctor): Avoided using
volatile qualified types with HP aCC 3 without the new +hpxstd98 option
to work around a compiler bug.


2008-04-14 Eric Lemings <eric.lemings@roguewave.com>

STDCXX-841
* trunk/tests/utilities/20.temp.buffer.cpp (test_failure): Print
correct value of `sizeof (T)' using rw_sprintf() function.
Prevent division by zero in terminal condition of for statement.
Also, use parentheses when calculating value of `nelems' to
indicate precedence of operators explicitly.


2008-03-27 Farid Zaripov <farid_zaripov@epam.com>

* tests/src/23.containers.cpp (_rw_vector_sigcat): Silenced warning
about unused variable.
(_rw_deque_sigcat): Same.
(_rw_queue_sigcat): Same.
(_rw_stack_sigcat): Same.
* tests/src/ctype.cpp (_rw_throw): Same.
* tests/src/opt_lines.cpp (_rw_enable_line): Same.
* tests/src/fnmatch.cpp (_rw_bracketmatch): ch parameted declared
as const unsigned char instead of unsigned int. Silenced conversion
warnings.
Added svn:eol-slyle=native property.
* tests/src/locale.cpp (rw_get_wchars): Fill wbuf array with
requested wide characters.
* tests/src/printf.cpp (_rw_fmt_pointer): Check return value from
rw_fmtlong() before adding it to len.


2008-03-27 Farid Zaripov <farid_zaripov@epam.com>

* tests/src/braceexp.cpp (_rw_string_buffer): Declare n parameter
as _RWSTD_SIZE_T instead of int to silence conversion warning.
* tests/src/char.cpp (_rw_fmtstringv): Silence size_t to int
conversion warning.
* tests/src/process.cpp (rw_process_kill): Silence conversion warning.
* tests/src/printf.cpp (_rw_vasnprintf_c99): Same.
(_rw_fmtbadaddr): Same.
(_rw_fmtarray): Same.
(_rw_vfprintf): Same. Use OutputDebugString() depending on _WIN32
macro instead of _MSC_VER. Don't call IsDebuggerPresent() (which
depends on macros _WIN32_WINNT and WINVER) because the
OutputDebugString() does nothing if there is no any attached
debugger present.
* tests/src/rand.cpp (rw_seed32): Declare k as _RWSTD_UINT32 instead
of _RWSTD_SIZE_T.
Removed useless casting of table32[ii] of type _RWSTD_UINT32 to
_RWSTD_SIZE_T before assign the value to _RWSTD_UINT32 seed.
(rw_seed32): Declare k as _RWSTD_UINT64 instead of _RWSTD_SIZE_T.
Removed useless casting of table64[ii] of type _RWSTD_UINT64 to
_RWSTD_SIZE_T before assign the value to _RWSTD_UINT64 seed.


2008-04-15 Farid Zaripov <farid_zaripov@epam.com>

* tests/src/driver.cpp [_MSC_VER] (_rw_opt_verbose): Turn on checking
the memory at every allocation and deallocation in verbose mode.
(_rw_opt_compat): Disable MSVC debug popup's in compat mode.


2008-03-16 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-646
* tests/src/environ.cpp (rw_putenv): Worked around the putenv()
limitations on Windows.


2008-03-15 Farid Zaripov <farid_zaripov@epam.com>

* tests/src/fmt_bits.cpp (_rw_fmtflags): Replace "iostate" to "fmtflags"
in default output. Conditionally output of the "std::ios::" prefix for
consistency.
(_rw_fmt_event): Replace "copyfmt_event" to "event" in default output.
Conditionally output of the "std::ios::" prefix for consistency.
* tests/self/0.printf.cpp (test_ios_bitmasks): Exercised the %{If} and
%{Ie} extensions to format ios::fmtflags and ios::event values.
(test_locale_category): New function to exercise %{Lc} extension to
format locale category values.
(main): Called test_locale_category().


2008-03-16 Martin Sebor <sebor@roguewave.com>

STDCXX-765
* tests/src/fmt_bits.cpp (_rw_bmpfmt): NUL-terminated string so that
it can be appended to using the %{+} directive, taking care not to
make the NUL a part of the formatted string.
(_rw_fmtflags): Same.
(_rw_fmtevent): Same.
(_rw_fmtlc): Same.


2008-04-04 Travis Vitek <vitek@roguewave.com>

STDCXX-755
* tests/src/locale.cpp (rw_locales): Check return from malloc()
(_rw_all_locales): Ditto.


2008-04-10 Farid Zaripov <farid_zaripov@epam.com>

* tests/src/locale.cpp (_rw_all_locales): Don't link nodes into result
when size == 0 to prevent heap corruption in _rw_reset_locales().


2008-03-16 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-711
* tests/src/fnmatch.cpp (rw_fnmatch): Check for the end of string
before invoking _rw_bracketmatch().


2008-04-11 Farid Zaripov <farid_zaripov@epam.com>

* tests/src/fnmatch.cpp (rw_fnmatch): Added checking *next for 0
before incrementing next in case '?'. Slightly optimized code and
added some _RWSTD_ASSERT's.


2008-04-02 Martin Sebor <sebor@roguewave.com>

* tests/src/braceexp.cpp (UChar): Added a convenience typedef.
(_rw_find_match, _rw_brace_graph::build_character_sequence): Cast
char to UChar before passing it to isspace, islower, and isupper
to avoid undefined behavior on sign extension.
(_rw_string_buffer, build_and_expand, _rw_brace_node_buffer,
_rw_brace_node, reset_for_reuse, get_new_node, brace_expand_write,
build_integer_sequence, brace_expand, rw_brace_expand,
rw_shell_expand): Used size_t instead of _RWSTD_SIZE_T for
readability.


2008-03-30 Martin Sebor <sebor@roguewave.com>

* tests/src/braceexp.cpp (_rw_brace_graph::build_anything): Handled
get_new_node's failure pointed out by HP aCC 6.16 warning #20200-D:
Potential null pointer dereference is detected.


2008-03-29 Martin Sebor <sebor@roguewave.com>

* tests/src/braceexp.cpp (_rw_is_not_space): Removed.
(_rw_find_match): Changed last argument from a function pointer
to bool to avoid having deal with language linkage incompatibility
with isspace and simplified implementation.
(rw_shell_expand): Adjusted _rw_find_match calls accordingly.


2008-03-28 Travis Vitek <vitek@roguewave.com>
STDCXX-784
* tess/src/braceexp.cpp [_RWSTD_NO_NESTED_CLASS_ACCESS]: Work
around issue that causes a compile failure when using private
declarations in nested types.


2008-03-24 Travis Vitek <vitek@roguewave.com>

STDCXX-784
* tests/src/braceexp.cpp: Work around SunPro bug that causes a
compile failure when using private declarations in nested types.


2008-02-28 Travis Vitek <vitek@roguewave.com>

* tests/src/braceexp.cpp (rw_shell_expand): Eliminate shadowed
variable warnings for s and n.


2008-02-21 Farid Zaripov <farid_zaripov@epam.com>

* tests/src/braceexp.cpp: #defined _RWSTD_TEST_SRC macro,
#included <rw_braceexp.h>.
(rw_brace_expand): Defined as _TEST_EXPORT.


2008-04-04 Eric Lemings <eric.lemings@roguewave.com>

STDCXX-761
* tests/src/new.cpp (rwt_checkpoint): Added internal
rwt_checkpoint_compare function and call it for each array
member disguised by original loop.


2007-12-18 Martin Sebor <sebor@roguewave.com>

* printf.cpp (rw_snprintf): NUL-terminated string just like
snprintf() does.


2008-03-15 Farid Zaripov <farid_zaripov@epam.com>

* tests/src/printf.cpp (rw_vasnprintf): Add assertion when processing
the "%{+}" directive to detect buffer overruns.


2008-03-24 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-790
* tests/src/printf.cpp (rw_vasnprintf): Corrected condition
in assertion, introduced in r637394.


2008-03-27 Farid Zaripov <farid_zaripov@epam.com>

STDCXX-798
* tests/self/0.printf.cpp (test_memptr): Corrected index calculations
according to endianness. Removed colon from expected resulting strings.
* tests/src/printf.cpp (_rw_fmtlong): Simplified code.
(_rw_fmtllong): Copied from _rw_fmtlong with changing corresponding
types to long long.
(_rw_fmtpointer): Corrected index calculations according to endianness.
Removed adding the colon separator.


2008-04-14 Travis Vitek <vitek@roguewave.com>

STDCXX-857
* tests/src/fmt_defs.h: Add flag to struct Buffer to indicate
who owns the allocated buffer.
* tests/src/printf.cpp (_rw_bufcat): Simplify logic to get
new buffer size. Avoid checking guard bytes and deallocating
buffer that we do not own.
(rw_vasnprintf): Set flag indicating that the caller owns the
supplied buffer.
(_rw_fmtarray): Ditto.
(_rw_fmt_expr): Ditto.
* tests/self/0.printf.cpp (test_reallocate): Add new test to
verify buffer reallocation works as expected.


2008-04-14 Travis Vitek <vitek@roguewave.com>

STDCXX-857
* tests/self/0.printf.cpp (test_reallocate): Revert test for
changes added in r647908.


2008-04-14 Travis Vitek <vitek@roguewave.com>

STDCXX-857
* tests/src/printf.cpp: Revert r647908 which indirectly caused
memory leaks in the test driver and several tests.
* tests/src/fmt_defs.h: Ditto.


2008-04-14 Travis Vitek <vitek@roguewave.com>

* tests/src/printf.cpp (_rw_bufcat): Simplify logic to get
new buffer size. Allocate minimum initial size to avoid a
first allocation that only contains the guard bytes. Add
comment about guard bytes so others might not get tricked.
* tests/src/process.cpp (_rw_vsystem): Avoid using static
buffer (might be freed by _rw_bufcat).
(_rw_vprocess_create): Ditto.


2008-04-14 Farid Zaripov <farid_zaripov@epam.com>

STDXX-862
* tests/self/0.char.cpp (test_rw_widen): Use UserTraits<UserChar>::
compare() instead of memcmp() to avoid false assertions due to
possibly different binary representation of (long double)0 and
(long double)0. on Sun C++ 5.9 / Linux.


2008-02-18 Martin Sebor <sebor@roguewave.com>

* 0.braceexp.cpp (run_bash_tests): New function to verify
rw_brace_expand() passes tests from the Bash test suite.
(main): Added a handful of tests (some failing), called
run_bash_tests.


2008-03-30 Martin Sebor <sebor@roguewave.com>

* tests/self/0.braceexp.cpp (test): Used size_t instead
of the _RWSTD_SIZE_T macro.
(run_tests): Added tests for embedded whitespace.
(run_brace_expand_tests): Ditto.
(run_shell_expand_tests): Ditto.


2008-04-11 Farid Zaripov <farid_zaripov@epam.com>

* tests/self/0.fnmatch.cpp (main): Exercised some incomplete patterns.


2008-02-05 Martin Sebor <sebor@roguewave.com>

* 0.printf.cpp (test_ios_bitmasks): Exercised the %{Is} extension
to format ios::iostate values.


2008-02-08 Martin Sebor <sebor@roguewave.com>

* display.cpp (print_target_plain): Increased column width to
so as to fit the longest test name (currently 35 characters).


2008-02-19 Martin Sebor <sebor@roguewave.com>

STDCXX-736
* util/locale.cpp [_RWSTD_EDG_ECCP]: Suppressed EDG eccp error #450-D:
the type "long long" is nonstandard, issued for uses of the type in
the Linux pthreadtypes.h system header.
* util/aliases.cpp [_RWSTD_EDG_ECCP]: Same.
* util/memchk.cpp [_RWSTD_EDG_ECCP && !_WIN32](getpagesize): Declared.


2008-02-21 Farid Zaripov <farid_zaripov@epam.com>

* util/path.cpp: Moved including of the system header files
on top of the file, to get _XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED
macros defined for all included headers.


2008-02-28 Farid Zaripov <farid_zaripov@epam.com>

* util/display.cpp (print_header_plain): Increased NAME column
width to reflect the changes in r620027.


2008-03-18 Martin Sebor <sebor@roguewave.com>

STDCXX-281
* util/collate.cpp (preprocess_collate): Break out of a loop on EOF
to avoid an infinite loop.


2008-03-18 Martin Sebor <sebor@roguewave.com>

* util/collate.cpp: Updated year of copyright.


2008-03-20 Martin Sebor <sebor@roguewave.com>

STDCXX-750
* util/aliases.cpp (get_installed_locales): Replaced malloc() with
a new expression to avoid having to check the returned value and
to silence HP cadvise warning #20200-D: Potential null pointer
dereference is detected.
Changed the type of locals to silence HP aCC 6.16 remark #4298-D:
addition result could be truncated before cast to bigger sized
type.


2008-03-31 Andrew Black <ablack@roguewave.com>

STDCXX-426
* util/output.cpp (struct readback): Add convenience data structure
for backwards file reading.
(rbinit): Add method to initialize structure.
(rbbof): Add method to check if structure points to the beginning
of a file.
(rbsync): Add method to synchronize the file handle the structure
is built on to the structure.
bgetc): Add method to retrieve a character from the file and
move the structure one position closer to the start
(rbscanf): Add methods to search for a string using the
structure, possibly capturing an unsigned integer in the process.
(check_test, check_compat_test): Alter to use above methods.


2008-04-03 Farid Zaripov <farid_zaripov@epam.com>

* util/output.cpp (parse_output): Open file in binary mode
(in text mode on Windows fread() returns value less than
actually bytes read due to replacing "\r\n" to "\n").


2008-04-04 Travis Vitek <vitek@roguewave.com>

* util/output.cpp (parse_output): Revert recent change to open file
in binary mode.


2008-04-07 Travis Vitek <vitek@roguewave.com>

* util/output.cpp (parse_output): Open file in binary mode
to avoid problems with line end translation in rbinit() and
rbgetc() on windows.
(check_test): Remove line end sequence from scan because file
opened in binary mode will not have translated line ends.
(check_example): Open example output file in binary mode to be
consistent with other file that is used for diff.


2008-04-08 Andrew Black <ablack@roguewave.com>

STDCXX-426
* util/output.cpp: Revert r643120, r644314, r645002, and
r645445. The initial version of the patch for STDCXX-426 (r643120)
resulted in failed processing of test output on windows. The
subsequent changes were efforts to resolve this failure, but
resulted either in failed example diffing on windows, or failed to
resolve the observed misbehavior.


2008-04-09 Martin Sebor <sebor@roguewave.com>

STDCXX-749
* util/time.cpp (parse_era): Checked the pointer returned from
strtok() before dereferencing it and issued an error when it's
null to silence HP aCC 6.16 potential null pointer dereference
warning.


2008-04-11 Travis Vitek <vitek@roguewave.com>

STDCXX-751
* util/locale_stub.cpp (main): Check pointer validity outside of
strcpy argument list to avoid bogus cadvise warning.
Files Changed
MODIFY /stdcxx/branches/4.2.x/examples/manual/fmtflags_manip.cpp
MODIFY /stdcxx/branches/4.2.x/src/iso2022.cpp
MODIFY /stdcxx/branches/4.2.x/examples/manual/ifstream.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.ctype.scan.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.codecvt.out.cpp
MODIFY /stdcxx/branches/4.2.x/include/rw/_traits.h
MODIFY /stdcxx/branches/4.2.x/src/file.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.ctype.toupper.cpp
ADD /stdcxx/branches/4.2.x/tests/regress/27.basic.ios.tie.stdcxx-804.cpp (from /stdcxx/trunk/tests/regress/27.basic.ios.tie.stdcxx-804.cpp)
MODIFY /stdcxx/branches/4.2.x/etc/config/src/EMPTY_MEM_INITIALIZER.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.time.get.cpp
MODIFY /stdcxx/branches/4.2.x/tests/iostream/27.istream.fmat.arith.cpp
MODIFY /stdcxx/branches/4.2.x/src/exception.cpp
ADD /stdcxx/branches/4.2.x/tests/src/fnmatch.cpp (from /stdcxx/trunk/tests/src/fnmatch.cpp)
MODIFY /stdcxx/branches/4.2.x/etc/config/windows/run_locale_utils.wsf
MODIFY /stdcxx/branches/4.2.x/tests/src/char.cpp
MODIFY /stdcxx/branches/4.2.x/tests/numerics/26.class.gslice.cpp
MODIFY /stdcxx/branches/4.2.x/include/loc/_moneypunct.h
MODIFY /stdcxx/branches/4.2.x/src/ia64/atomic.s
MODIFY /stdcxx/branches/4.2.x/tests/strings/21.string.push_back.mt.cpp
MODIFY /stdcxx/branches/4.2.x/tests/strings/21.cwctype.cpp
MODIFY /stdcxx/branches/4.2.x/examples/manual/bitset.cpp
MODIFY /stdcxx/branches/4.2.x/etc/config/makefile.rules
MODIFY /stdcxx/branches/4.2.x/src/num_get.cpp
MODIFY /stdcxx/branches/4.2.x/include/loc/_money_put.cc
ADD /stdcxx/branches/4.2.x/tests/regress/27.basic.ios.copyfmt.stdcxx-766.cpp (from /stdcxx/trunk/tests/regress/27.basic.ios.copyfmt.stdcxx-766.cpp)
MODIFY /stdcxx/branches/4.2.x/include/rw/_config-gcc.h
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.ctype.narrow.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.messages.cpp
MODIFY /stdcxx/branches/4.2.x/tests/strings/21.string.cons.mt.cpp
MODIFY /stdcxx/branches/4.2.x/tests/strings/21.string.iterators.cpp
MODIFY /stdcxx/branches/4.2.x/tests/include/rw_locale.h
MODIFY /stdcxx/branches/4.2.x/examples/manual/max_elem.cpp
MODIFY /stdcxx/branches/4.2.x/include/loc/_num_get.cc
MODIFY /stdcxx/branches/4.2.x/tests/iostream/27.objects.cpp
MODIFY /stdcxx/branches/4.2.x/tests/self/0.char.cpp
MODIFY /stdcxx/branches/4.2.x/util/scanner.cpp
MODIFY /stdcxx/branches/4.2.x/src/iostream.cpp
MODIFY /stdcxx/branches/4.2.x/util/aliases.cpp
MODIFY /stdcxx/branches/4.2.x/tests/containers/23.bitset.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.numpunct.mt.cpp
MODIFY /stdcxx/branches/4.2.x/tests/include/23.containers.h
ADD /stdcxx/branches/4.2.x/etc/nls/languages (from /stdcxx/trunk/etc/nls/languages)
MODIFY /stdcxx/branches/4.2.x/examples/manual/codecvt.cpp
MODIFY /stdcxx/branches/4.2.x/util/path.cpp
MODIFY /stdcxx/branches/4.2.x/etc/config/src/float_defs.h
MODIFY /stdcxx/branches/4.2.x/include/rw/_tree.h
ADD /stdcxx/branches/4.2.x/tests/support/18.numeric.special.int.cpp (from /stdcxx/trunk/tests/support/18.numeric.special.int.cpp)
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.num.get.cpp
MODIFY /stdcxx/branches/4.2.x/tests/numerics/26.c.math.cpp
MODIFY /stdcxx/branches/4.2.x/etc/config/src/UNAME.cpp
ADD /stdcxx/branches/4.2.x/tests/src/braceexp.cpp (from /stdcxx/trunk/tests/src/braceexp.cpp)
MODIFY /stdcxx/branches/4.2.x/tests/src/environ.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.time.put.cpp
MODIFY /stdcxx/branches/4.2.x/doc/stdlibref/codecvt.html
MODIFY /stdcxx/branches/4.2.x/src/iso2022.h
ADD /stdcxx/branches/4.2.x/tests/localization/22.locale.numpunct.cpp (from /stdcxx/trunk/tests/localization/22.locale.numpunct.cpp)
ADD /stdcxx/branches/4.2.x/tests/diagnostics/19.std.exceptions.cpp (from /stdcxx/trunk/tests/diagnostics/19.std.exceptions.cpp)
MODIFY /stdcxx/branches/4.2.x/tests/src/21.strings.cpp
MODIFY /stdcxx/branches/4.2.x/include/sstream.cc
MODIFY /stdcxx/branches/4.2.x/etc/config/src/INFINITY.cpp
MODIFY /stdcxx/branches/4.2.x/tests/include/21.strings.h
MODIFY /stdcxx/branches/4.2.x/tests/src/printf.cpp
ADD /stdcxx/branches/4.2.x/tests/regress/27.stringbuf.overflow.stdcxx-795.cpp (from /stdcxx/trunk/tests/regress/27.stringbuf.overflow.stdcxx-795.cpp)
MODIFY /stdcxx/branches/4.2.x/src/num_put.cpp
MODIFY /stdcxx/branches/4.2.x/src/version.cpp
MODIFY /stdcxx/branches/4.2.x/src/messages.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.codecvt.mt.cpp
MODIFY /stdcxx/branches/4.2.x/util/collate.cpp
MODIFY /stdcxx/branches/4.2.x/tests/strings/21.string.cons.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.messages.mt.cpp
MODIFY /stdcxx/branches/4.2.x/tests/algorithms/25.random.shuffle.cpp
MODIFY /stdcxx/branches/4.2.x/etc/config/run_locale_utils.sh
MODIFY /stdcxx/branches/4.2.x/examples/manual/merge.cpp
MODIFY /stdcxx/branches/4.2.x/tests/src/rand.cpp
MODIFY /stdcxx/branches/4.2.x/examples/manual/random_shuffle.cpp
MODIFY /stdcxx/branches/4.2.x/include/rw/_exception.h
MODIFY /stdcxx/branches/4.2.x/include/string
ADD /stdcxx/branches/4.2.x/tests/self/0.braceexp.cpp (from /stdcxx/trunk/tests/self/0.braceexp.cpp)
MODIFY /stdcxx/branches/4.2.x/examples/tutorial/spell.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.ctype.cpp
MODIFY /stdcxx/branches/4.2.x/examples/manual/mismatch.cpp
ADD /stdcxx/branches/4.2.x/tests/regress/27.filebuf.members.stdcxx-308.cpp (from /stdcxx/trunk/tests/regress/27.filebuf.members.stdcxx-308.cpp)
MODIFY /stdcxx/branches/4.2.x/src/iostore.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.num.put.cpp
MODIFY /stdcxx/branches/4.2.x/src/setlocale.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.num.get.mt.cpp
MODIFY /stdcxx/branches/4.2.x/util/def.h
ADD /stdcxx/branches/4.2.x/tests/include/rw_fnmatch.h (from /stdcxx/trunk/tests/include/rw_fnmatch.h)
MODIFY /stdcxx/branches/4.2.x/tests/src/process.cpp
MODIFY /stdcxx/branches/4.2.x/examples/manual/codecvt1.cpp
MODIFY /stdcxx/branches/4.2.x/include/ansi/climits
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.money.get.mt.cpp
MODIFY /stdcxx/branches/4.2.x/util/memchk.cpp
ADD /stdcxx/branches/4.2.x/tests/support/18.support.dynamic.cpp (from /stdcxx/trunk/tests/support/18.support.dynamic.cpp)
MODIFY /stdcxx/branches/4.2.x/include/rw/_tree.cc
MODIFY /stdcxx/branches/4.2.x/src/wcodecvt.cpp
MODIFY /stdcxx/branches/4.2.x/src/ios.cpp
MODIFY /stdcxx/branches/4.2.x/src/once.cpp
MODIFY /stdcxx/branches/4.2.x/examples/manual/partition.cpp
MODIFY /stdcxx/branches/4.2.x/include/rw/_mutex.h
MODIFY /stdcxx/branches/4.2.x/util/ctype.cpp
MODIFY /stdcxx/branches/4.2.x/examples/manual/generate.cpp
MODIFY /stdcxx/branches/4.2.x/include/loc/_ctype.h
ADD /stdcxx/branches/4.2.x/tests/include/rw_braceexp.h (from /stdcxx/trunk/tests/include/rw_braceexp.h)
ADD /stdcxx/branches/4.2.x/etc/config/src/EQUAL_CTYPE_MASK.cpp (from /stdcxx/trunk/etc/config/src/EQUAL_CTYPE_MASK.cpp)
ADD /stdcxx/branches/4.2.x/etc/nls/encodings (from /stdcxx/trunk/etc/nls/encodings)
MODIFY /stdcxx/branches/4.2.x/tests/utilities/20.temp.buffer.mt.cpp
MODIFY /stdcxx/branches/4.2.x/tests/src/driver.cpp
MODIFY /stdcxx/branches/4.2.x/tests/regress/21.string.stdcxx-162.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.num.put.mt.cpp
MODIFY /stdcxx/branches/4.2.x/util/locale_stub.cpp
MODIFY /stdcxx/branches/4.2.x/include/iomanip
ADD /stdcxx/branches/4.2.x/tests/self/0.fnmatch.cpp (from /stdcxx/trunk/tests/self/0.fnmatch.cpp)
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.money.put.mt.cpp
MODIFY /stdcxx/branches/4.2.x/include/ansi/limits.h
MODIFY /stdcxx/branches/4.2.x/examples/manual/lex_compare.cpp
MODIFY /stdcxx/branches/4.2.x/doc/stdlibref/basic-ios.html
MODIFY /stdcxx/branches/4.2.x/tests/containers/23.list.cons.cpp
MODIFY /stdcxx/branches/4.2.x/tests/src/23.containers.cpp
MODIFY /stdcxx/branches/4.2.x/tests/tr1.util/2.smartptr.shared.cpp
REPLACE /stdcxx/branches/4.2.x/tests/iterators/24.istream.iterator.cpp (from /stdcxx/trunk/tests/iterators/24.istream.iterator.cpp)
MODIFY /stdcxx/branches/4.2.x/tests/src/new.cpp
MODIFY /stdcxx/branches/4.2.x/util/locale.cpp
MODIFY /stdcxx/branches/4.2.x/tests/src/fmt_bits.cpp
MODIFY /stdcxx/branches/4.2.x/util/scanner.h
MODIFY /stdcxx/branches/4.2.x/include/rw/_streamiter.h
MODIFY /stdcxx/branches/4.2.x/include/ostream
ADD /stdcxx/branches/4.2.x/tests/regress/22.locale.codecvt.stdcxx-435.cpp (from /stdcxx/trunk/tests/regress/22.locale.codecvt.stdcxx-435.cpp)
MODIFY /stdcxx/branches/4.2.x/tests/src/opt_lines.cpp
MODIFY /stdcxx/branches/4.2.x/tests/include/23.list.h
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.statics.mt.cpp
MODIFY /stdcxx/branches/4.2.x/etc/config/src/libc_decl.sh
ADD /stdcxx/branches/4.2.x/tests/regress/24.istream.iterator.cons.stdcxx-645.cpp (from /stdcxx/trunk/tests/regress/24.istream.iterator.cons.stdcxx-645.cpp)
ADD /stdcxx/branches/4.2.x/tests/iterators (from /stdcxx/trunk/tests/iterators)
MODIFY /stdcxx/branches/4.2.x/tests/strings/21.string.access.cpp
MODIFY /stdcxx/branches/4.2.x/src/wctype.cpp
ADD /stdcxx/branches/4.2.x/etc/nls/countries (from /stdcxx/trunk/etc/nls/countries)
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.time.get.mt.cpp
MODIFY /stdcxx/branches/4.2.x/tests/src/locale.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.cons.mt.cpp
ADD /stdcxx/branches/4.2.x/tests/support/18.support.rtti.cpp (from /stdcxx/trunk/tests/support/18.support.rtti.cpp)
MODIFY /stdcxx/branches/4.2.x/include/loc/_num_get.h
MODIFY /stdcxx/branches/4.2.x/examples/manual/istringstream.cpp
MODIFY /stdcxx/branches/4.2.x/util/time.cpp
MODIFY /stdcxx/branches/4.2.x/tests/include/driver.h
MODIFY /stdcxx/branches/4.2.x/src/valarray.cpp
MODIFY /stdcxx/branches/4.2.x/tests/regress/22.locale.stdcxx-554.cpp
MODIFY /stdcxx/branches/4.2.x/doc/stdlibref/lists.html
MODIFY /stdcxx/branches/4.2.x/src/locale_body.cpp
MODIFY /stdcxx/branches/4.2.x/etc/config/src/headers.inc
MODIFY /stdcxx/branches/4.2.x/src/locale_global.cpp
ADD /stdcxx/branches/4.2.x/tests/regress/24.istream.iterator.ops.stdcxx-321.cpp (from /stdcxx/trunk/tests/regress/24.istream.iterator.ops.stdcxx-321.cpp)
MODIFY /stdcxx/branches/4.2.x/examples/manual/remove.cpp
MODIFY /stdcxx/branches/4.2.x/include/loc/_localedef.h
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.ctype.tolower.cpp
MODIFY /stdcxx/branches/4.2.x/include/rw/_array.h
MODIFY /stdcxx/branches/4.2.x/include/deque
MODIFY /stdcxx/branches/4.2.x/tests/src/ctype.cpp
ADD /stdcxx/branches/4.2.x/tests/support/18.numeric.special.float.cpp (from /stdcxx/trunk/tests/support/18.numeric.special.float.cpp)
MODIFY /stdcxx/branches/4.2.x/include/rw/_mbstate.h
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.moneypunct.mt.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.ctype.mt.cpp
MODIFY /stdcxx/branches/4.2.x/examples/manual/memfunref.cpp
MODIFY /stdcxx/branches/4.2.x/include/set
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.ctype.is.cpp
MODIFY /stdcxx/branches/4.2.x/tests/self/0.printf.cpp
MODIFY /stdcxx/branches/4.2.x/util/display.cpp
MODIFY /stdcxx/branches/4.2.x/src/punct.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.time.put.mt.cpp
MODIFY /stdcxx/branches/4.2.x/tests/localization/22.locale.globals.mt.cpp
MODIFY /stdcxx/branches/4.2.x/tests/utilities/20.temp.buffer.cpp

Farid Zaripov added a comment - 17/Apr/08 09:43 AM

Martin Sebor added a comment - 22/Apr/08 03:55 AM
Regression test committed and verified as passing in nightly builds.
Both fix and test merged to 4.2.x in r648752.

Martin Sebor made changes - 22/Apr/08 03:55 AM
Status Resolved [ 5 ] Closed [ 6 ]