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

login
register
mail settings
Submitter Carlos O'Donell
Date Dec. 3, 2019, 8:47 p.m.
Message ID <9e41bfdd-c2e6-9fcd-9576-d485aba0d401@redhat.com>
Download mbox | patch
Permalink /patch/36484/
State New
Headers show

Comments

Carlos O'Donell - Dec. 3, 2019, 8:47 p.m.
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(+)
Florian Weimer - Dec. 3, 2019, 9:41 p.m.
* 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