Fix build with -march=486 -Os (Bug 25240)

Message ID 9e41bfdd-c2e6-9fcd-9576-d485aba0d401@redhat.com
State Committed
Headers

Commit Message

Carlos O'Donell Dec. 3, 2019, 8:47 p.m. UTC
  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

Florian Weimer Dec. 3, 2019, 9:41 p.m. UTC | #1
* 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
  

Patch

diff --git a/assert/tst-assert-c++.cc b/assert/tst-assert-c++.cc
index 41cb487512..a175f5e961 100644
--- a/assert/tst-assert-c++.cc
+++ b/assert/tst-assert-c++.cc
@@ -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