diff mbox

[v2] libstdc++: Make certain exceptions transaction_safe.

Message ID 1453389937.4592.3.camel@localhost.localdomain
State New
Headers show

Commit Message

Torvald Riegel Jan. 21, 2016, 3:25 p.m. UTC
On Thu, 2016-01-21 at 11:00 +0100, Dominique d'Humières wrote:
> Torvald,
> 
> Now that I can bootstrap on darwin, I have found the following failure for libitm.c++/libstdc++-safeexc.C
> 
> /opt/gcc/work/libitm/testsuite/libitm.c++/libstdc++-safeexc.C:50:2: error: unsafe function call 'std::underflow_error::underflow_error(const string&)' within atomic transaction
>   throw T (what);
>   ^~~~~

Does this patch fix it (ie, mark the test unsupported)?

Comments

Dominique d'Humières Jan. 21, 2016, 5:15 p.m. UTC | #1
> Le 21 janv. 2016 à 16:25, Torvald Riegel <triegel@redhat.com> a écrit :
> 
> On Thu, 2016-01-21 at 11:00 +0100, Dominique d'Humières wrote:
>> Torvald,
>> 
>> Now that I can bootstrap on darwin, I have found the following failure for libitm.c++/libstdc++-safeexc.C
>> 
>> /opt/gcc/work/libitm/testsuite/libitm.c++/libstdc++-safeexc.C:50:2: error: unsafe function call 'std::underflow_error::underflow_error(const string&)' within atomic transaction
>>  throw T (what);
>>  ^~~~~
> 
> Does this patch fix it (ie, mark the test unsupported)?

AFAIU the error occurs at compile time and If my memory is correct the patch won’t fix the issue (not tested) and the test should be skipped on *-*-darwin* powerpc-ibm-aix*.

Dominique
Dominique d'Humières Jan. 21, 2016, 5:29 p.m. UTC | #2
> Le 21 janv. 2016 à 18:15, Dominique d'Humières <dominiq@lps.ens.fr> a écrit :
> 
> 
>> Le 21 janv. 2016 à 16:25, Torvald Riegel <triegel@redhat.com> a écrit :
>> 
>> On Thu, 2016-01-21 at 11:00 +0100, Dominique d'Humières wrote:
>>> Torvald,
>>> 
>>> Now that I can bootstrap on darwin, I have found the following failure for libitm.c++/libstdc++-safeexc.C
>>> 
>>> /opt/gcc/work/libitm/testsuite/libitm.c++/libstdc++-safeexc.C:50:2: error: unsafe function call 'std::underflow_error::underflow_error(const string&)' within atomic transaction
>>> throw T (what);
>>> ^~~~~
>> 
>> Does this patch fix it (ie, mark the test unsupported)?
> 
> AFAIU the error occurs at compile time and If my memory is correct the patch won’t fix the issue (not tested) and the test should be skipped on *-*-darwin* powerpc-ibm-aix*.

OK, my memory was not good!-( However the target selection in the patch is wrong, the following one works

// { dg-do run { target { ! { *-*-darwin* powerpc-ibm-aix* } } } }


Dominique
Mike Stump Jan. 21, 2016, 6:06 p.m. UTC | #3
On Jan 21, 2016, at 9:29 AM, Dominique d'Humières <dominiq@lps.ens.fr> wrote:
> // { dg-do run { target { ! { *-*-darwin* powerpc-ibm-aix* } } } }

A comment to hint that this has something to do with weak undefined would be nice.
Pedro Alves Jan. 21, 2016, 6:12 p.m. UTC | #4
On 01/21/2016 06:06 PM, Mike Stump wrote:
> On Jan 21, 2016, at 9:29 AM, Dominique d'Humières <dominiq@lps.ens.fr> wrote:
>> // { dg-do run { target { ! { *-*-darwin* powerpc-ibm-aix* } } } }
> 
> A comment to hint that this has something to do with weak undefined would be nice.
> 

Or come up with some new "dg-require-effective-target weakref-whatnot", making it
self-documenting.
Torvald Riegel Jan. 21, 2016, 6:18 p.m. UTC | #5
On Thu, 2016-01-21 at 18:12 +0000, Pedro Alves wrote:
> On 01/21/2016 06:06 PM, Mike Stump wrote:
> > On Jan 21, 2016, at 9:29 AM, Dominique d'Humières <dominiq@lps.ens.fr> wrote:
> >> // { dg-do run { target { ! { *-*-darwin* powerpc-ibm-aix* } } } }
> > 
> > A comment to hint that this has something to do with weak undefined would be nice.
> > 
> 
> Or come up with some new "dg-require-effective-target weakref-whatnot", making it
> self-documenting.
> 

It's just one test that needs this right now.  If there should be more
in the future, I agree that a dg-require-... might be nicer.
diff mbox

Patch

commit 259c0cf27d0a88eecc90af1aa500f88f6108cb04
Author: Torvald Riegel <triegel@redhat.com>
Date:   Thu Jan 21 16:21:33 2016 +0100

    libitm: Disable testing transaction-safe exceptions on Darwin and AIX.
    
    	* testsuite/libitm.c++/libstdc++-safeexc.C: Not supported on darwin
    	or AIX.

diff --git a/libitm/testsuite/libitm.c++/libstdc++-safeexc.C b/libitm/testsuite/libitm.c++/libstdc++-safeexc.C
index 3e1655e..55ebd25 100644
--- a/libitm/testsuite/libitm.c++/libstdc++-safeexc.C
+++ b/libitm/testsuite/libitm.c++/libstdc++-safeexc.C
@@ -2,7 +2,10 @@ 
 // are indeed that.  Thus, this also tests the transactional clones in
 // libstdc++ and libsupc++.
 
-// { dg-do run }
+// Not supported on Darwin nor AIX because those lack the support for
+// weak references to undefined functions that we need in libstdc++ to make
+// exceptions transaction-safe.
+// { dg-do run { target { ! *-*-darwin* powerpc-ibm-aix* } } }
 
 #include <iostream>
 #include <exception>