[committed] libstdc++: More workarounds in 17_intro/names.cc test [PR 97088]

Jonathan Wakely jwakely@redhat.com
Mon Jun 28 14:20:58 GMT 2021


On Mon, 28 Jun 2021 at 12:56, Christophe LYON wrote:
>
>
> On 25/06/2021 21:51, Jonathan Wakely via Libstdc++ wrote:
> > Conditionally #undef some more names that are used in system headers.
> >
> > libstdc++-v3/ChangeLog:
> >
> >       PR libstdc++/97088
> >       * testsuite/17_intro/names.cc: Undef more names for newlib and
> >       also for arm-none-linux-gnueabi.
> >       * testsuite/experimental/names.cc: Disable PCH.
> >
> > Tested powerpc64le-linux. Committed to trunk.
>
> Hi Jonathan,
>
> After disabling PCH, we now have the following failures on arm-eabi,
> using newlib-3.3:
>
> FAIL: experimental/names.cc (test for excess errors)
> Excess errors:
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/tools/arm-none-eabi/include/math.h:194:
> error: expected ')' before ';' token
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/tools/arm-none-eabi/include/math.h:195:
> error: expected ')' before ';' token
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/tools/arm-none-eabi/include/math.h:196:
> error: expected ')' before ';' token
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/tools/arm-none-eabi/include/math.h:197:
> error: expected ')' before ';' token
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/tools/arm-none-eabi/include/math.h:198:
> error: expected ')' before ';' token
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/tools/arm-none-eabi/include/math.h:199:
> error: expected ')' before ';' token
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/tools/arm-none-eabi/include/math.h:200:
> error: expected ')' before ';' token
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/tools/arm-none-eabi/include/math.h:201:
> error: expected ')' before ';' token
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/tools/arm-none-eabi/include/time.h:110:
> error: expected unqualified-id before ';' token
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/tools/arm-none-eabi/include/time.h:110:
> error: expected ')' before ';' token
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/tools/arm-none-eabi/include/inttypes.h:323:
> error: expected ')' before ';' token
>
> All this is a bit of a mess :-)

Ugh, that's because I made a mess of the #if logic. My last change was
supposed to avoid exactly those errors, but I messed up.

I'm testing the attached patch (but not on arm or newlib), which should fix it.
-------------- next part --------------
commit 75f948f089ceb8888fd00913635264e20610d0f2
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Mon Jun 28 15:13:34 2021

    libstdc++: Fix backwards logic in 17_intro/names.cc test [PR 97088]
    
    I meant to undef the names that clash with newlib headers for newlib,
    but I only undef'd them for non-newlib targets. This means they still
    cause errors for newlib, and aren't tested for other targets.
    
    This fixes the test to check those names for non-newlib targets, and to
    undef them to avoid errors for newlib.
    
    libstdc++-v3/ChangeLog:
    
            PR libstdc++/97088
            * testsuite/17_intro/names.cc: Fix #if condition for names used
            by newlib headers.

diff --git a/libstdc++-v3/testsuite/17_intro/names.cc b/libstdc++-v3/testsuite/17_intro/names.cc
index 805c1002c3f..aca7a8e5812 100644
--- a/libstdc++-v3/testsuite/17_intro/names.cc
+++ b/libstdc++-v3/testsuite/17_intro/names.cc
@@ -123,6 +123,10 @@
 #define ptr (
 #endif
 
+// This clashes with newlib so don't use it.
+# define __lockable		cannot be used as an identifier
+
+
 // Common template parameter names
 #define OutputIterator		OutputIterator is not a reserved name
 #define InputIterator		InputIterator is not a reserved name
@@ -222,9 +226,9 @@
 #undef y
 #endif
 
-#if ! __has_include(<newlib.h>)
-// newlib's <sys/cdefs.h> defines __lockable as a macro, so we can't use it.
-# define __lockable		cannot be used as an identifier
+#if __has_include(<newlib.h>)
+// newlib's <sys/cdefs.h> defines __lockable as a macro.
+#undef __lockable
 // newlib's <time.h> defines __tzrule_type with these members.
 #undef d
 #undef m


More information about the Gcc-patches mailing list