public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/34031] New: money_get:do_get incorrectly sets eofbit for valid input
@ 2007-11-08 18:14 janis at gcc dot gnu dot org
2007-11-08 18:37 ` [Bug libstdc++/34031] " pcarlini at suse dot de
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: janis at gcc dot gnu dot org @ 2007-11-08 18:14 UTC (permalink / raw)
To: gcc-bugs
The C++ Standard, in section 22.2.6.1.1, says that if money_get::do_get
recognizes a valid sequence then it does not modify the ios_base::iostate
variable passed to it. That variable should be set to eofbit only if do_get
has not recognized a valid sequence and no more characters are available. This
was reported within IBM.
The testcase below gives the following output with GCC 3.3:
Contents of digits = "11"
Contents of retval = " 22"
mystate is goodbit as expected
and the following with later versions, including current mainline:
Contents of digits = "11"
Contents of retval = " 22"
mystate is eofbit, should not have changed
The testcase:
----------------------------------------------------------
#include <locale>
#include <string>
#include <sstream>
#include <cstring>
#include <cstdlib>
// Declare our own version of money_get to get access to do_get.
struct MyMoneyGet : public std::money_get<char, char *>
{
char *
my_do_get (char *pa, char *pz, bool intl,
std::ios_base &myios, std::ios_base::iostate &mystate,
std::string &digits)
{
return do_get (pa, pz, intl, myios, mystate, digits);
}
};
int
main ()
{
std::string digits;
MyMoneyGet mg;
std::ios_base::iostate mystate;
std::stringstream myios;
std::locale mylocale (std::locale::classic (), new std::moneypunct<char>);
myios.imbue (mylocale);
char s1[] = "11 22";
char s2[] = "11"; // use this to get the length we want
char *retval;
size_t len2 = strlen (s2);
// Parse the string "11" from the larger string "11 12"; we do that
// to be able to look at the return value in retval.
mystate = std::ios_base::goodbit;
retval = mg.my_do_get (s1, s1 + len2, false, myios, mystate, digits);
printf ("Contents of digits = \"%s\"\n", digits.c_str ());
printf ("Contents of retval = \"%s\"\n", retval);
if (mystate == std::ios_base::goodbit)
printf ("mystate is goodbit as expected\n");
else
{
if (mystate == std::ios_base::eofbit)
printf ("mystate is eofbit, should not have changed\n");
else
printf ("mystate is %d, should not have changed\n", mystate);
abort ();
}
}
-------------------------------------------------------------------
The behavior changed with:
http://gcc.gnu.org/viewcvs?view=rev&rev=73011
r73011 | paolo | 2003-10-28 17:09:03 +0000 (Tue, 28 Oct 2003)
--
Summary: money_get:do_get incorrectly sets eofbit for valid input
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: janis at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34031
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug libstdc++/34031] money_get:do_get incorrectly sets eofbit for valid input
2007-11-08 18:14 [Bug libstdc++/34031] New: money_get:do_get incorrectly sets eofbit for valid input janis at gcc dot gnu dot org
@ 2007-11-08 18:37 ` pcarlini at suse dot de
2007-11-08 18:52 ` sebor at roguewave dot com
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: pcarlini at suse dot de @ 2007-11-08 18:37 UTC (permalink / raw)
To: gcc-bugs
------- Comment #1 from pcarlini at suse dot de 2007-11-08 18:37 -------
Hi Martin. I think this inconsistency between num_get and money_get is just a
special case of our DR 585:
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#585
and that setting eofbit when end of file after successful parsing of a monetary
quantity is consistent with our proposed resolution. Can you confirm? Thanks in
advance.
--
pcarlini at suse dot de changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |sebor at roguewave dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34031
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug libstdc++/34031] money_get:do_get incorrectly sets eofbit for valid input
2007-11-08 18:14 [Bug libstdc++/34031] New: money_get:do_get incorrectly sets eofbit for valid input janis at gcc dot gnu dot org
2007-11-08 18:37 ` [Bug libstdc++/34031] " pcarlini at suse dot de
@ 2007-11-08 18:52 ` sebor at roguewave dot com
2007-11-08 18:59 ` [Bug libstdc++/34031] [DR 585] " pcarlini at suse dot de
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: sebor at roguewave dot com @ 2007-11-08 18:52 UTC (permalink / raw)
To: gcc-bugs
------- Comment #2 from sebor at roguewave dot com 2007-11-08 18:52 -------
Yes, I can confirm that, Paolo. The Apache C++ Standard Library behaves the
same (i.e., the facet sets eofbit).
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34031
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug libstdc++/34031] [DR 585] money_get:do_get incorrectly sets eofbit for valid input
2007-11-08 18:14 [Bug libstdc++/34031] New: money_get:do_get incorrectly sets eofbit for valid input janis at gcc dot gnu dot org
` (2 preceding siblings ...)
2007-11-08 18:59 ` [Bug libstdc++/34031] [DR 585] " pcarlini at suse dot de
@ 2007-11-08 18:59 ` pcarlini at suse dot de
2010-02-08 11:08 ` paolo dot carlini at oracle dot com
4 siblings, 0 replies; 6+ messages in thread
From: pcarlini at suse dot de @ 2007-11-08 18:59 UTC (permalink / raw)
To: gcc-bugs
------- Comment #3 from pcarlini at suse dot de 2007-11-08 18:59 -------
Thanks Martin. Therefore, let's confirm this bug to suspend it immediately
until our DR get resolved.
--
pcarlini at suse dot de changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2007-11-08 18:59:04
date| |
Summary|money_get:do_get incorrectly|[DR 585] money_get:do_get
|sets eofbit for valid input |incorrectly sets eofbit for
| |valid input
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34031
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug libstdc++/34031] [DR 585] money_get:do_get incorrectly sets eofbit for valid input
2007-11-08 18:14 [Bug libstdc++/34031] New: money_get:do_get incorrectly sets eofbit for valid input janis at gcc dot gnu dot org
2007-11-08 18:37 ` [Bug libstdc++/34031] " pcarlini at suse dot de
2007-11-08 18:52 ` sebor at roguewave dot com
@ 2007-11-08 18:59 ` pcarlini at suse dot de
2007-11-08 18:59 ` pcarlini at suse dot de
2010-02-08 11:08 ` paolo dot carlini at oracle dot com
4 siblings, 0 replies; 6+ messages in thread
From: pcarlini at suse dot de @ 2007-11-08 18:59 UTC (permalink / raw)
To: gcc-bugs
--
pcarlini at suse dot de changed:
What |Removed |Added
----------------------------------------------------------------------------
CC|sebor at roguewave dot com |
Status|NEW |SUSPENDED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34031
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug libstdc++/34031] [DR 585] money_get:do_get incorrectly sets eofbit for valid input
2007-11-08 18:14 [Bug libstdc++/34031] New: money_get:do_get incorrectly sets eofbit for valid input janis at gcc dot gnu dot org
` (3 preceding siblings ...)
2007-11-08 18:59 ` pcarlini at suse dot de
@ 2010-02-08 11:08 ` paolo dot carlini at oracle dot com
4 siblings, 0 replies; 6+ messages in thread
From: paolo dot carlini at oracle dot com @ 2010-02-08 11:08 UTC (permalink / raw)
To: gcc-bugs
------- Comment #4 from paolo dot carlini at oracle dot com 2010-02-08 11:08 -------
DR 585 has been resolved to NAD
--
paolo dot carlini at oracle dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|SUSPENDED |NEW
Last reconfirmed|2007-11-08 18:59:04 |2010-02-08 11:08:29
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34031
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-02-08 11:08 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-11-08 18:14 [Bug libstdc++/34031] New: money_get:do_get incorrectly sets eofbit for valid input janis at gcc dot gnu dot org
2007-11-08 18:37 ` [Bug libstdc++/34031] " pcarlini at suse dot de
2007-11-08 18:52 ` sebor at roguewave dot com
2007-11-08 18:59 ` [Bug libstdc++/34031] [DR 585] " pcarlini at suse dot de
2007-11-08 18:59 ` pcarlini at suse dot de
2010-02-08 11:08 ` paolo dot carlini at oracle dot com
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).