libstdc++: Fix bootstrap with -fno-rtti [PR 99077]
authorJonathan Wakely <jwakely@redhat.com>
Fri, 12 Feb 2021 10:37:56 +0000 (10:37 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Fri, 12 Feb 2021 14:30:12 +0000 (14:30 +0000)
commit4591f7e5329dcc6ee9af2f314a050936d470ab5b
treeed5797f420c605bbf8a024737f5e7931cb5787da
parent71b8ed7c61bc6f80df41f9aa3cf9eb57fb664e77
libstdc++: Fix bootstrap with -fno-rtti [PR 99077]

When libstdc++ is built without RTTI the __ios_failure type is just an
alias for std::ios_failure, so trying to construct it from an int won't
compile. This changes the RTTI-enabled __ios_failure type to have the
same constructor parameters as std::ios_failure, so that the constructor
takes the same arguments whether RTTI is enabled or not.

The __throw_ios_failure function now constructs the error_code, instead
of the __ios_failure constructor. As a drive-by fix that error_code is
constructed with std::generic_category() not std::system_category(),
because the int comes from errno which corresponds to the generic
category.

libstdc++-v3/ChangeLog:

PR libstdc++/99077
* src/c++11/cxx11-ios_failure.cc (__ios_failure(const char*, int)):
Change int parameter to error_code, to match std::ios_failure.
(__throw_ios_failure(const char*, int)): Construct error_code
from int parameter.
libstdc++-v3/src/c++11/cxx11-ios_failure.cc