Fix build with -march=486 -Os (Bug 25240)
Commit Message
While reviewing bug 25240 I found that -march=486 -Os doesn't build
with gcc 9.2.1 because of this problem. Fixing is straight forward,
but I'm not sure if undefining NDEBUG like this is the best solution.
I wonder if there isn't a pragma we might use here? Thoughts?
8< --- 8< --- 8<
In a -march=486 -Os build gcc 9.2.1 issues the following error:
tst-assert-c++.cc: In function ‘int do_test()’:
tst-assert-c++.cc:66:12: error: unused variable ‘value’ [-Werror=unused-variable]
66 | no_int value;
| ^~~~~
tst-assert-c++.cc:71:18: error: unused variable ‘value’ [-Werror=unused-variable]
71 | bool_and_int value;
| ^~~~~
The assert has been disabled by -Os leaving the value unused.
We never want the assert disabled because that's the point of the
test, so we undefine NDEBUG before including assert.h to ensure that
we get assert defined correctly.
---
assert/tst-assert-c++.cc | 3 +++
1 file changed, 3 insertions(+)
Comments
* Carlos O'Donell:
> While reviewing bug 25240 I found that -march=486 -Os doesn't build
> with gcc 9.2.1 because of this problem. Fixing is straight forward,
> but I'm not sure if undefining NDEBUG like this is the best solution.
> I wonder if there isn't a pragma we might use here? Thoughts?
-march=i486?
Where does this NDEBUG come from, exactly?
Thanks,
Florian
@@ -16,6 +16,9 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+/* We do not want the compiler or any other pre-included header from
+ removing the assert we want to test, so undefine NDEBUG right now. */
+#undef NDEBUG
#include <assert.h>
/* The C++ standard requires that if the assert argument is a constant