https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125228
Bug ID: 125228
Summary: Avoid using assert in libstdc++
Product: gcc
Version: 16.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: dragon-archer at outlook dot com
Target Milestone: ---
Unlike `__glibcxx_assert` which is guarded by`_GLIBCXX_ASSERTIONS` and enabled
only in Debug build of libstdc++, `assert` is either always enabled, or always
disabled if manually defining `NDEBUG` before `#include <cassert>` or `#include
<assert.h>`. This not only makes `assert` inflexible, but also introduces extra
runtime overhead and/or increased binary size in Release builds.
Uses of `assert` without `NDEBUG` introduces `__FILE__` into the final library,
and can be easily found using `string`
This is a long standing issue, dating from at least GCC 8.5.0 to latest GCC
16.1.0
```
# GCC 8.5.0 on an RHEL server
$ strings -fn10 /usr/lib64/libstdc++.so.6 | grep libstdc++-v3
/usr/lib64/libstdc++.so.6:
/builddir/build/BUILD/gcc-8.5.0-20210514/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/include/bits/atomic_base.h
/usr/lib64/libstdc++.so.6:
/builddir/build/BUILD/gcc-8.5.0-20210514/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/include/valarray
/usr/lib64/libstdc++.so.6: ../../../../../libstdc++-v3/src/c++11/debug.cc
/usr/lib64/libstdc++.so.6:
/builddir/build/BUILD/gcc-8.5.0-20210514/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/include/bits/basic_string.h
# GCC 15.2.0 on Ubuntu 26.04
$ strings -fn10 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep 'libstdc++-v3'
/usr/lib/x86_64-linux-gnu/libstdc++.so.6:
../../../../../src/libstdc++-v3/src/c++11/debug.cc
/usr/lib/x86_64-linux-gnu/libstdc++.so.6:
../../../../../src/libstdc++-v3/src/c++17/ryu/generic_128.h
/usr/lib/x86_64-linux-gnu/libstdc++.so.6:
../../../../../src/libstdc++-v3/src/c++17/ryu/common.h
/usr/lib/x86_64-linux-gnu/libstdc++.so.6:
../../../../../src/libstdc++-v3/src/c++17/ryu/f2s_intrinsics.h
/usr/lib/x86_64-linux-gnu/libstdc++.so.6:
../../../../../src/libstdc++-v3/src/c++17/ryu/d2fixed.c
/usr/lib/x86_64-linux-gnu/libstdc++.so.6:
../../../../../src/libstdc++-v3/src/c++17/ryu/d2s.c
/usr/lib/x86_64-linux-gnu/libstdc++.so.6:
../../../../../src/libstdc++-v3/src/c++17/ryu/d2s_intrinsics.h
# GCC 16.1.0 from MSYS2
$ strings -fn10 /ucrt64/bin/libstdc++-6.dll | grep 'libstdc++-v3'
D:/msys64/ucrt64/bin/libstdc++-6.dll:
../../../../../gcc-16.1.0/libstdc++-v3/src/c++11/debug.cc
D:/msys64/ucrt64/bin/libstdc++-6.dll:
../../../../../gcc-16.1.0/libstdc++-v3/src/c++17/ryu/generic_128.h
D:/msys64/ucrt64/bin/libstdc++-6.dll:
../../../../../gcc-16.1.0/libstdc++-v3/src/c++17/ryu/f2s_intrinsics.h
D:/msys64/ucrt64/bin/libstdc++-6.dll:
../../../../../gcc-16.1.0/libstdc++-v3/src/c++17/ryu/common.h
D:/msys64/ucrt64/bin/libstdc++-6.dll:
../../../../../gcc-16.1.0/libstdc++-v3/src/c++17/ryu/d2fixed.c
D:/msys64/ucrt64/bin/libstdc++-6.dll:
../../../../../gcc-16.1.0/libstdc++-v3/src/c++17/ryu/d2s_intrinsics.h
D:/msys64/ucrt64/bin/libstdc++-6.dll:
../../../../../gcc-16.1.0/libstdc++-v3/src/c++17/ryu/d2s.c
```