https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108886
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Jonny Grant from comment #2)
> I was taught to validate parameters at University. Personally I always
> follow defensive programming approaches to avoid crashes.
So stop passing null to these functions then :-)
> So I would check
> parameters on all interface methods and operators. I would rely on the
> compiler to remove any unnecessary duplicate sanity checks.
That doesn't necessarily work when the member functions are separately
compiled, as with most std::string member functions.
> > What would be the point of _GLIBCXX_DEBUG_PEDASSERT when there's already a
> > debug assertion there? Compiling with _GLIBCXX_DEBUG will already abort.
>
> I don't see a debug assertion for _GLIBCXX_DEBUG_PEDASSERT could you point
> out the file and line number to me please.
You already quoted it in your comment 0 above, it's right there in assign(const
_CharT*)!
basic_string&
assign(const _CharT* __s)
{
__glibcxx_requires_string(__s);
> Just compiled with -D_GLIBCXX_DEBUG but I don't get any abort, just the same
> SEGV
> https://godbolt.org/z/rjYG8Yrnh
If you want a PEDASSERT to fire you need to actually request pedantic
assertions.
https://godbolt.org/z/874x18G1G
/opt/compiler-explorer/gcc-trunk-20230227/include/c++/13.0.1/bits/basic_string.h:1645:
constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&
std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::assign(const _CharT*)
[with _CharT = char; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]: Assertion '__s != nullptr' failed.
I'm not persuaded to change anything here. The performance of string
assignments is very important and adding an extra branch and throwing an
exception isn't free.