Page MenuHomePhabricator

[istream] Fix error flags and exceptions propagated from input stream operations

Authored by ldionne on Jul 26 2018, 9:25 AM.



Before this patch, we would only ever throw an exception if the badbit
was set on the stream. The Standard is currently very unclear on how
exceptions should be propagated and what error flags should be set by
the input stream operations. This commit changes libc++ to behave under
a different (but valid) interpretation of the Standard. This interpretation
of the Standard matches what other implementations are doing.

I will submit a paper in San Diego to clarify the Standard such that the
interpretation used in this commit (and other implementations) is the only
possible one.

Event Timeline

ldionne created this revision.Jul 26 2018, 9:25 AM

This is a very tricky change since it touches all the input stream operations, both formatted and unformatted. However, I think it's an important change as it fixes extremely broken behavior. The paper I'm working on to fix this in the Standard is Perhaps we should wait for the paper to make its way through the Standard before committing this, but in any case the new behavior of libc++ should now match that of libstdc++ and MSVC (couldn't test with those libraries, though).

lichray accepted this revision.Nov 8 2018, 11:20 AM
lichray added a subscriber: lichray.
lichray added inline comments.

I like auto just FYI :)



This revision is now accepted and ready to land.Nov 8 2018, 11:20 AM