diff mbox series

Fix coroutine tests for libstdc++ gnu-version-namespace mode

Message ID 4ebb6936-d652-84a5-0028-6ca0a5d2d238@gmail.com
State New
Headers show
Series Fix coroutine tests for libstdc++ gnu-version-namespace mode | expand

Commit Message

François Dumont Sept. 23, 2023, 8:10 p.m. UTC
I'm eventually fixing those tests the same way we manage this problem in 
libstdc++ testsuite.

    testsuite: Add optional libstdc++ version namespace in expected 
diagnostic

     When libstdc++ is build with 
--enable-symvers=gnu-versioned-namespace diagnostics are
     showing this namespace, currently __8.

     gcc/testsuite/ChangeLog:

             * 
testsuite/g++.dg/coroutines/coro-bad-alloc-00-bad-op-new.C: Add optional
             '__8' version namespace in expected diagnostic.
             * 
testsuite/g++.dg/coroutines/coro-bad-alloc-01-bad-op-del.C: Likewise.
             * 
testsuite/g++.dg/coroutines/coro-bad-alloc-02-no-op-new-nt.C: Likewise.
             * 
testsuite/g++.dg/coroutines/coro-bad-grooaf-01-grooaf-expected.C: Likewise.
             * testsuite/g++.dg/coroutines/pr97438.C: Likewise.
             * testsuite/g++.dg/coroutines/ramp-return-b.C: Likewise.

Tested under Linux x86_64.

I'm contributing to libstdc++ so I already have write access.

Ok to commit ?

François

Comments

François Dumont Oct. 2, 2023, 5:07 p.m. UTC | #1
Hi

Gentle reminder for this minor patch.

Thanks

On 23/09/2023 22:10, François Dumont wrote:
> I'm eventually fixing those tests the same way we manage this problem 
> in libstdc++ testsuite.
>
>    testsuite: Add optional libstdc++ version namespace in expected 
> diagnostic
>
>     When libstdc++ is build with 
> --enable-symvers=gnu-versioned-namespace diagnostics are
>     showing this namespace, currently __8.
>
>     gcc/testsuite/ChangeLog:
>
>             * 
> testsuite/g++.dg/coroutines/coro-bad-alloc-00-bad-op-new.C: Add optional
>             '__8' version namespace in expected diagnostic.
>             * 
> testsuite/g++.dg/coroutines/coro-bad-alloc-01-bad-op-del.C: Likewise.
>             * 
> testsuite/g++.dg/coroutines/coro-bad-alloc-02-no-op-new-nt.C: Likewise.
>             * 
> testsuite/g++.dg/coroutines/coro-bad-grooaf-01-grooaf-expected.C: 
> Likewise.
>             * testsuite/g++.dg/coroutines/pr97438.C: Likewise.
>             * testsuite/g++.dg/coroutines/ramp-return-b.C: Likewise.
>
> Tested under Linux x86_64.
>
> I'm contributing to libstdc++ so I already have write access.
>
> Ok to commit ?
>
> François
Jonathan Wakely Oct. 3, 2023, 9:52 a.m. UTC | #2
On Mon, 2 Oct 2023 at 18:07, François Dumont <frs.dumont@gmail.com> wrote:
>
> Hi
>
> Gentle reminder for this minor patch.

It looks like you attached the wrong patch.


>
> Thanks
>
> On 23/09/2023 22:10, François Dumont wrote:
> > I'm eventually fixing those tests the same way we manage this problem
> > in libstdc++ testsuite.
> >
> >    testsuite: Add optional libstdc++ version namespace in expected
> > diagnostic
> >
> >     When libstdc++ is build with
> > --enable-symvers=gnu-versioned-namespace diagnostics are
> >     showing this namespace, currently __8.
> >
> >     gcc/testsuite/ChangeLog:
> >
> >             *
> > testsuite/g++.dg/coroutines/coro-bad-alloc-00-bad-op-new.C: Add optional
> >             '__8' version namespace in expected diagnostic.
> >             *
> > testsuite/g++.dg/coroutines/coro-bad-alloc-01-bad-op-del.C: Likewise.
> >             *
> > testsuite/g++.dg/coroutines/coro-bad-alloc-02-no-op-new-nt.C: Likewise.
> >             *
> > testsuite/g++.dg/coroutines/coro-bad-grooaf-01-grooaf-expected.C:
> > Likewise.
> >             * testsuite/g++.dg/coroutines/pr97438.C: Likewise.
> >             * testsuite/g++.dg/coroutines/ramp-return-b.C: Likewise.
> >
> > Tested under Linux x86_64.
> >
> > I'm contributing to libstdc++ so I already have write access.
> >
> > Ok to commit ?
> >
> > François
François Dumont Oct. 3, 2023, 8:14 p.m. UTC | #3
Indeed ! Here is the right one.

On 03/10/2023 11:52, Jonathan Wakely wrote:
> On Mon, 2 Oct 2023 at 18:07, François Dumont <frs.dumont@gmail.com> wrote:
>> Hi
>>
>> Gentle reminder for this minor patch.
> It looks like you attached the wrong patch.
>
>
>> Thanks
>>
>> On 23/09/2023 22:10, François Dumont wrote:
>>> I'm eventually fixing those tests the same way we manage this problem
>>> in libstdc++ testsuite.
>>>
>>>     testsuite: Add optional libstdc++ version namespace in expected
>>> diagnostic
>>>
>>>      When libstdc++ is build with
>>> --enable-symvers=gnu-versioned-namespace diagnostics are
>>>      showing this namespace, currently __8.
>>>
>>>      gcc/testsuite/ChangeLog:
>>>
>>>              *
>>> testsuite/g++.dg/coroutines/coro-bad-alloc-00-bad-op-new.C: Add optional
>>>              '__8' version namespace in expected diagnostic.
>>>              *
>>> testsuite/g++.dg/coroutines/coro-bad-alloc-01-bad-op-del.C: Likewise.
>>>              *
>>> testsuite/g++.dg/coroutines/coro-bad-alloc-02-no-op-new-nt.C: Likewise.
>>>              *
>>> testsuite/g++.dg/coroutines/coro-bad-grooaf-01-grooaf-expected.C:
>>> Likewise.
>>>              * testsuite/g++.dg/coroutines/pr97438.C: Likewise.
>>>              * testsuite/g++.dg/coroutines/ramp-return-b.C: Likewise.
>>>
>>> Tested under Linux x86_64.
>>>
>>> I'm contributing to libstdc++ so I already have write access.
>>>
>>> Ok to commit ?
>>>
>>> François
Iain Sandoe Oct. 8, 2023, 1:59 p.m. UTC | #4
Hi François,

> On 23 Sep 2023, at 21:10, François Dumont <frs.dumont@gmail.com> wrote:
> 
> I'm eventually fixing those tests the same way we manage this problem in libstdc++ testsuite.
> 
>    testsuite: Add optional libstdc++ version namespace in expected diagnostic
> 
>     When libstdc++ is build with --enable-symvers=gnu-versioned-namespace diagnostics are
>     showing this namespace, currently __8.
> 
>     gcc/testsuite/ChangeLog:
> 
>             * testsuite/g++.dg/coroutines/coro-bad-alloc-00-bad-op-new.C: Add optional
>             '__8' version namespace in expected diagnostic.
>             * testsuite/g++.dg/coroutines/coro-bad-alloc-01-bad-op-del.C: Likewise.
>             * testsuite/g++.dg/coroutines/coro-bad-alloc-02-no-op-new-nt.C: Likewise.
>             * testsuite/g++.dg/coroutines/coro-bad-grooaf-01-grooaf-expected.C: Likewise.
>             * testsuite/g++.dg/coroutines/pr97438.C: Likewise.
>             * testsuite/g++.dg/coroutines/ramp-return-b.C: Likewise.
> 
> Tested under Linux x86_64.
> 
> I'm contributing to libstdc++ so I already have write access.
> 
> Ok to commit ?

As author of the tests, this LGTM as a suitable fix for now (at least, once the main
patch to fix versioned namespaces lands).

However, IMO, this could become quite painful as more g++ tests make use of std headers
(which is not really optional for facilities like this that are tightly-coupled between the FE and
the library).

For the future, it does seem that a more complete solution might be to introduce a
testsuite-wide definition for the C++ versioned std:: introducer, so that we can update it in one
place as the version changes.

So (as a thought experiment):
 - we’d have something of the form “CXX_STD” as a tcl global
 - we’d add the presence/absence of versioning to the relevant site.exp (which
   means recognising the versioning choice also in the GCC configure)
 - we’d migrate tests to using ${CXX_STD} instead of "std::__N”  in matches

… I guess an alternative could be to cook up some alternate warning/error/etc
   match functions that cater for arbitrary inline namespaces but that seems like a much
   more tricky and invasive testsuite change.

thoughts?
Iain
François Dumont Oct. 11, 2023, 4:49 a.m. UTC | #5
On 08/10/2023 15:59, Iain Sandoe wrote:
> Hi François,
>
>> On 23 Sep 2023, at 21:10, François Dumont <frs.dumont@gmail.com> wrote:
>>
>> I'm eventually fixing those tests the same way we manage this problem in libstdc++ testsuite.
>>
>>     testsuite: Add optional libstdc++ version namespace in expected diagnostic
>>
>>      When libstdc++ is build with --enable-symvers=gnu-versioned-namespace diagnostics are
>>      showing this namespace, currently __8.
>>
>>      gcc/testsuite/ChangeLog:
>>
>>              * testsuite/g++.dg/coroutines/coro-bad-alloc-00-bad-op-new.C: Add optional
>>              '__8' version namespace in expected diagnostic.
>>              * testsuite/g++.dg/coroutines/coro-bad-alloc-01-bad-op-del.C: Likewise.
>>              * testsuite/g++.dg/coroutines/coro-bad-alloc-02-no-op-new-nt.C: Likewise.
>>              * testsuite/g++.dg/coroutines/coro-bad-grooaf-01-grooaf-expected.C: Likewise.
>>              * testsuite/g++.dg/coroutines/pr97438.C: Likewise.
>>              * testsuite/g++.dg/coroutines/ramp-return-b.C: Likewise.
>>
>> Tested under Linux x86_64.
>>
>> I'm contributing to libstdc++ so I already have write access.
>>
>> Ok to commit ?
> As author of the tests, this LGTM as a suitable fix for now (at least, once the main
> patch to fix versioned namespaces lands).

I just realized it was a "go", no ? Then why after the main patch ?

The "main patch" do not fix the versioned namespace. It just makes it 
adopt the cxx11 abi.

This patch fixes a problem that is as old as the tests and that is 
totally unrelated with the main one. I just wanted to improve the 
situation so that versioned namespace mode do not look more buggy than 
necessary when someone (like you) run those.

>
> However, IMO, this could become quite painful as more g++ tests make use of std headers
> (which is not really optional for facilities like this that are tightly-coupled between the FE and
> the library).
>
> For the future, it does seem that a more complete solution might be to introduce a
> testsuite-wide definition for the C++ versioned std:: introducer, so that we can update it in one
> place as the version changes.
>
> So (as a thought experiment):
>   - we’d have something of the form “CXX_STD” as a tcl global
>   - we’d add the presence/absence of versioning to the relevant site.exp (which
>     means recognising the versioning choice also in the GCC configure)
>   - we’d migrate tests to using ${CXX_STD} instead of "std::__N”  in matches
>
> … I guess an alternative could be to cook up some alternate warning/error/etc
>     match functions that cater for arbitrary inline namespaces but that seems like a much
>     more tricky and invasive testsuite change.
>
> thoughts?

I considered amending gcc/testsuite/lib/prune.exp to simply remove the 
version from the diagnostic. But the reply on why it was not working 
scared me, so this patch.

https://gcc.gnu.org/pipermail/gcc/2023-September/242526.html
Iain Sandoe Oct. 11, 2023, 7:30 a.m. UTC | #6
Hi François,

> On 11 Oct 2023, at 05:49, François Dumont <frs.dumont@gmail.com> wrote:
> On 08/10/2023 15:59, Iain Sandoe wrote:
>>> On 23 Sep 2023, at 21:10, François Dumont <frs.dumont@gmail.com> wrote:
>>> 
>>> I'm eventually fixing those tests the same way we manage this problem in libstdc++ testsuite.
>>> 
>>>    testsuite: Add optional libstdc++ version namespace in expected diagnostic
>>> 
>>>     When libstdc++ is build with --enable-symvers=gnu-versioned-namespace diagnostics are
>>>     showing this namespace, currently __8.
>>> 
>>>     gcc/testsuite/ChangeLog:
>>> 
>>>             * testsuite/g++.dg/coroutines/coro-bad-alloc-00-bad-op-new.C: Add optional
>>>             '__8' version namespace in expected diagnostic.
>>>             * testsuite/g++.dg/coroutines/coro-bad-alloc-01-bad-op-del.C: Likewise.
>>>             * testsuite/g++.dg/coroutines/coro-bad-alloc-02-no-op-new-nt.C: Likewise.
>>>             * testsuite/g++.dg/coroutines/coro-bad-grooaf-01-grooaf-expected.C: Likewise.
>>>             * testsuite/g++.dg/coroutines/pr97438.C: Likewise.
>>>             * testsuite/g++.dg/coroutines/ramp-return-b.C: Likewise.
>>> 
>>> Tested under Linux x86_64.
>>> 
>>> I'm contributing to libstdc++ so I already have write access.
>>> 
>>> Ok to commit ?
>> As author of the tests, this LGTM as a suitable fix for now (at least, once the main
>> patch to fix versioned namespaces lands).
> 
> I just realized it was a "go", no ? Then why after the main patch ?
> 
> The "main patch" do not fix the versioned namespace. It just makes it adopt the cxx11 abi.
> 
> This patch fixes a problem that is as old as the tests and that is totally unrelated with the main one. I just wanted to improve the situation so that versioned namespace mode do not look more buggy than necessary when someone (like you) run those.

Maybe a misunderstanding on my part.  I was under the impression that versioned-namespace was currently unusable because it forces the old string ABI.  If that is not the case, then I guess the changes are OK now.

I am pretty concerned about the maintainability of this tho, hence this …

>> However, IMO, this could become quite painful as more g++ tests make use of std headers
>> (which is not really optional for facilities like this that are tightly-coupled between the FE and
>> the library).
>> 
>> For the future, it does seem that a more complete solution might be to introduce a
>> testsuite-wide definition for the C++ versioned std:: introducer, so that we can update it in one
>> place as the version changes.
>> 
>> So (as a thought experiment):
>>  - we’d have something of the form “CXX_STD” as a tcl global
>>  - we’d add the presence/absence of versioning to the relevant site.exp (which
>>    means recognising the versioning choice also in the GCC configure)
>>  - we’d migrate tests to using ${CXX_STD} instead of "std::__N”  in matches
>> 
>> … I guess an alternative could be to cook up some alternate warning/error/etc
>>    match functions that cater for arbitrary inline namespaces but that seems like a much
>>    more tricky and invasive testsuite change.
>> 
>> thoughts?
> 
> I considered amending gcc/testsuite/lib/prune.exp to simply remove the version from the diagnostic. But the reply on why it was not working scared me, so this patch.
> 
> https://gcc.gnu.org/pipermail/gcc/2023-September/242526.html

Ah, I didn’t see that mail - will try to take a look at the weekend.
Iain
François Dumont Oct. 11, 2023, 5:22 p.m. UTC | #7
Hi Iain

On 11/10/2023 09:30, Iain Sandoe wrote:
> Hi François,
>
>> On 11 Oct 2023, at 05:49, François Dumont <frs.dumont@gmail.com> wrote:
>> On 08/10/2023 15:59, Iain Sandoe wrote:
>>>> On 23 Sep 2023, at 21:10, François Dumont <frs.dumont@gmail.com> wrote:
>>>>
>>>> I'm eventually fixing those tests the same way we manage this problem in libstdc++ testsuite.
>>>>
>>>>     testsuite: Add optional libstdc++ version namespace in expected diagnostic
>>>>
>>>>      When libstdc++ is build with --enable-symvers=gnu-versioned-namespace diagnostics are
>>>>      showing this namespace, currently __8.
>>>>
>>>>      gcc/testsuite/ChangeLog:
>>>>
>>>>              * testsuite/g++.dg/coroutines/coro-bad-alloc-00-bad-op-new.C: Add optional
>>>>              '__8' version namespace in expected diagnostic.
>>>>              * testsuite/g++.dg/coroutines/coro-bad-alloc-01-bad-op-del.C: Likewise.
>>>>              * testsuite/g++.dg/coroutines/coro-bad-alloc-02-no-op-new-nt.C: Likewise.
>>>>              * testsuite/g++.dg/coroutines/coro-bad-grooaf-01-grooaf-expected.C: Likewise.
>>>>              * testsuite/g++.dg/coroutines/pr97438.C: Likewise.
>>>>              * testsuite/g++.dg/coroutines/ramp-return-b.C: Likewise.
>>>>
>>>> Tested under Linux x86_64.
>>>>
>>>> I'm contributing to libstdc++ so I already have write access.
>>>>
>>>> Ok to commit ?
>>> As author of the tests, this LGTM as a suitable fix for now (at least, once the main
>>> patch to fix versioned namespaces lands).
>> I just realized it was a "go", no ? Then why after the main patch ?
>>
>> The "main patch" do not fix the versioned namespace. It just makes it adopt the cxx11 abi.
>>
>> This patch fixes a problem that is as old as the tests and that is totally unrelated with the main one. I just wanted to improve the situation so that versioned namespace mode do not look more buggy than necessary when someone (like you) run those.
> Maybe a misunderstanding on my part.  I was under the impression that versioned-namespace was currently unusable because it forces the old string ABI.  If that is not the case, then I guess the changes are OK now.

Said this way it sure makes this mode usability quite limited.

It's only functional to (almost) pass make check-c++ :-)

>
> I am pretty concerned about the maintainability of this tho, hence this …
>
>>> However, IMO, this could become quite painful as more g++ tests make use of std headers
>>> (which is not really optional for facilities like this that are tightly-coupled between the FE and
>>> the library).
>>>
>>> For the future, it does seem that a more complete solution might be to introduce a
>>> testsuite-wide definition for the C++ versioned std:: introducer, so that we can update it in one
>>> place as the version changes.
>>>
>>> So (as a thought experiment):
>>>   - we’d have something of the form “CXX_STD” as a tcl global
>>>   - we’d add the presence/absence of versioning to the relevant site.exp (which
>>>     means recognising the versioning choice also in the GCC configure)
>>>   - we’d migrate tests to using ${CXX_STD} instead of "std::__N”  in matches
>>>
>>> … I guess an alternative could be to cook up some alternate warning/error/etc
>>>     match functions that cater for arbitrary inline namespaces but that seems like a much
>>>     more tricky and invasive testsuite change.
>>>
>>> thoughts?
>> I considered amending gcc/testsuite/lib/prune.exp to simply remove the version from the diagnostic. But the reply on why it was not working scared me, so this patch.
>>
>> https://gcc.gnu.org/pipermail/gcc/2023-September/242526.html
> Ah, I didn’t see that mail - will try to take a look at the weekend.

Ok, I'll instead chase for the patches on libstdc++ side then.

Moreover adopting cxx11 abi in versioned-namespace mode will imply a 
version bump which would force to patch those files again if we do not 
find another approach before.

Thanks,

François
diff mbox series

Patch

diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 73e7f381020..c44b71a04cb 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -4867,7 +4867,7 @@  dnl
 dnl Control whether the library should define symbols for old and new ABIs.
 dnl This affects definitions of strings, stringstreams and locale facets.
 dnl
-dnl --disable-libstdcxx-dual-abi will use old ABI for all types.
+dnl --disable-libstdcxx-dual-abi will use new ABI for all types.
 dnl
 dnl Defines:
 dnl  _GLIBCXX_USE_DUAL_ABI (always defined, either to 1 or 0)
@@ -4883,7 +4883,7 @@  AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI], [
   else
     if test x"$enable_libstdcxx_dual_abi" != xyes; then
       AC_MSG_NOTICE([dual ABI is disabled])
-      default_libstdcxx_abi="gcc4-compatible"
+      default_libstdcxx_abi="new"
     fi
   fi
   GLIBCXX_CONDITIONAL(ENABLE_DUAL_ABI, test $enable_libstdcxx_dual_abi = yes)
@@ -4898,7 +4898,6 @@  dnl Defines:
 dnl  _GLIBCXX_USE_CXX11_ABI (always defined, either to 1 or 0)
 dnl
 AC_DEFUN([GLIBCXX_DEFAULT_ABI], [
-  if test x$enable_libstdcxx_dual_abi = xyes; then
   AC_MSG_CHECKING([for default std::string ABI to use])
   AC_ARG_WITH([default-libstdcxx-abi],
     AS_HELP_STRING([--with-default-libstdcxx-abi],
@@ -4912,7 +4911,6 @@  AC_DEFUN([GLIBCXX_DEFAULT_ABI], [
      ],
     [default_libstdcxx_abi="new"])
   AC_MSG_RESULT(${default_libstdcxx_abi})
-  fi
   if test $default_libstdcxx_abi = "new"; then
     glibcxx_cxx11_abi=1
     glibcxx_cxx98_abi=0
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 6e9a532a359..14f9569597a 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -70712,13 +70712,12 @@  $as_echo "$as_me: dual ABI is disabled" >&6;}
     if test x"$enable_libstdcxx_dual_abi" != xyes; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: dual ABI is disabled" >&5
 $as_echo "$as_me: dual ABI is disabled" >&6;}
-      default_libstdcxx_abi="gcc4-compatible"
+      default_libstdcxx_abi="new"
     fi
   fi
 
 
 
-  if test x$enable_libstdcxx_dual_abi = xyes; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for default std::string ABI to use" >&5
 $as_echo_n "checking for default std::string ABI to use... " >&6; }
 
@@ -70737,7 +70736,6 @@  fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${default_libstdcxx_abi}" >&5
 $as_echo "${default_libstdcxx_abi}" >&6; }
-  fi
   if test $default_libstdcxx_abi = "new"; then
     glibcxx_cxx11_abi=1
     glibcxx_cxx98_abi=0