libstdc++: Improve std::regex_error::what() strings
authorJonathan Wakely <jwakely@redhat.com>
Thu, 16 Dec 2021 13:39:09 +0000 (13:39 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Wed, 5 Jan 2022 13:47:00 +0000 (13:47 +0000)
commit260a5334ee963f66745d0cb98316ee831737b22d
tree48a67f6bea04924bdc63091cc22cd54cde7ab5a5
parentb1e701dc4adb11a5ed5f45c2fb31ba4689b718d0
libstdc++: Improve std::regex_error::what() strings

This replaces the vague "regex_error" for std::regex_error::what() with
a string that corresponds to the error_type enum passed to the
constructor. This allows us to remove many of the strings passed to
__throw_regex_error, because the default string is at least as good.
When a string argument to __throw_regex_error is kept it should add some
context-specific detail absent from the default string.

Also remove full stops (periods) from the end of those strings, to make
it easier to include them in logs and other output. I've left them
starting with an upper-case letter, which is consistent with strerror
output for (at least) Glibc, Solaris and BSD. I'm ambivalent whether
that's the right choice.

This also adds the missing noreturn attribute to __throw_regex_error.

libstdc++-v3/ChangeLog:

* include/bits/regex_compiler.tcc: Adjust all calls to
__throw_regex_error.
* include/bits/regex_error.h (__throw_regex_error): Add noreturn
attribute.
* include/bits/regex_scanner.tcc: Likewise.
* src/c++11/regex.cc (desc): New helper function.
(regex_error::regex_error(error_type)): Use desc to get a string
corresponding to the error code.
libstdc++-v3/include/bits/regex_compiler.tcc
libstdc++-v3/include/bits/regex_error.h
libstdc++-v3/include/bits/regex_scanner.tcc
libstdc++-v3/src/c++11/regex.cc