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.
commit 75f948f089ceb8888fd00913635264e20610d0f2 Author: Jonathan Wakely <jwak...@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