Greetings,
I would like to resume testing MSVC STL using the Libc++ tests.
Would it be OK to add noexcept specifiers to some of the test structs that
are used as template params to std::atomic? I believe this change is
benign, so I am hoping you don't care or require conditional blocks.
Explanation from:
https://connect.microsoft.com/VisualStudio/feedbackdetail/view/906973
atomic() noexcept = default", so when the default constructor for
std::atomic<T> is invoked for a type T that has a throwing constructor,
the noexcept version is not found, which causes the compiler to emit
an error message about the deleted function. To work around this,
you need to declare the constructor of test_struct as noexcept.
The affected tests pass using:
clang version 3.5.0 (trunk 212120)
Target: x86_64-unknown-linux-gnu
Thread model: posix
Thanks,
Steve MacKenzie
Index:
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong.pass.cpp
(revision 216300)
+++
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong.pass.cpp
(working copy)
@@ -55,7 +55,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
friend bool operator==(const A& x, const A& y)
{return x.i == y.i;}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit.pass.cpp
(revision 216300)
+++
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit.pass.cpp
(working copy)
@@ -62,7 +62,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
friend bool operator==(const A& x, const A& y)
{return x.i == y.i;}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak.pass.cpp
(revision 215176)
+++
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak.pass.cpp
(working copy)
@@ -55,7 +55,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
friend bool operator==(const A& x, const A& y)
{return x.i == y.i;}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit.pass.cpp
(revision 215176)
+++
atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit.pass.cpp
(working copy)
@@ -62,7 +62,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
friend bool operator==(const A& x, const A& y)
{return x.i == y.i;}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_exchange.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_exchange.pass.cpp
(revision 215176)
+++
atomics.types.operations/atomics.types.operations.req/atomic_exchange.pass.cpp
(working copy)
@@ -40,7 +40,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
friend bool operator==(const A& x, const A& y)
{return x.i == y.i;}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_exchange_explicit.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_exchange_explicit.pass.cpp
(revision 215176)
+++
atomics.types.operations/atomics.types.operations.req/atomic_exchange_explicit.pass.cpp
(working copy)
@@ -42,7 +42,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
friend bool operator==(const A& x, const A& y)
{return x.i == y.i;}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_fetch_add.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_fetch_add.pass.cpp
(revision 215176)
+++
atomics.types.operations/atomics.types.operations.req/atomic_fetch_add.pass.cpp
(working copy)
@@ -75,7 +75,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
A(const A& a) : i(a.i) {}
A(const volatile A& a) : i(a.i) {}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_fetch_add_explicit.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_fetch_add_explicit.pass.cpp
(revision 215176)
+++
atomics.types.operations/atomics.types.operations.req/atomic_fetch_add_explicit.pass.cpp
(working copy)
@@ -79,7 +79,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
A(const A& a) : i(a.i) {}
A(const volatile A& a) : i(a.i) {}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub.pass.cpp
(revision 215176)
+++
atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub.pass.cpp
(working copy)
@@ -75,7 +75,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
A(const A& a) : i(a.i) {}
A(const volatile A& a) : i(a.i) {}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub_explicit.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub_explicit.pass.cpp
(revision 215176)
+++
atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub_explicit.pass.cpp
(working copy)
@@ -80,7 +80,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
A(const A& a) : i(a.i) {}
A(const volatile A& a) : i(a.i) {}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_init.pass.cpp
===================================================================
--- atomics.types.operations/atomics.types.operations.req/atomic_init.pass.cpp
(revision 215176)
+++ atomics.types.operations/atomics.types.operations.req/atomic_init.pass.cpp
(working copy)
@@ -38,7 +38,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
friend bool operator==(const A& x, const A& y)
{return x.i == y.i;}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_load.pass.cpp
===================================================================
--- atomics.types.operations/atomics.types.operations.req/atomic_load.pass.cpp
(revision 215176)
+++ atomics.types.operations/atomics.types.operations.req/atomic_load.pass.cpp
(working copy)
@@ -38,7 +38,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
friend bool operator==(const A& x, const A& y)
{return x.i == y.i;}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_load_explicit.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_load_explicit.pass.cpp
(revision 215176)
+++
atomics.types.operations/atomics.types.operations.req/atomic_load_explicit.pass.cpp
(working copy)
@@ -38,7 +38,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
friend bool operator==(const A& x, const A& y)
{return x.i == y.i;}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_store.pass.cpp
===================================================================
--- atomics.types.operations/atomics.types.operations.req/atomic_store.pass.cpp
(revision 215176)
+++ atomics.types.operations/atomics.types.operations.req/atomic_store.pass.cpp
(working copy)
@@ -38,7 +38,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
friend bool operator==(const A& x, const A& y)
{return x.i == y.i;}
Index:
atomics.types.operations/atomics.types.operations.req/atomic_store_explicit.pass.cpp
===================================================================
---
atomics.types.operations/atomics.types.operations.req/atomic_store_explicit.pass.cpp
(revision 215176)
+++
atomics.types.operations/atomics.types.operations.req/atomic_store_explicit.pass.cpp
(working copy)
@@ -38,7 +38,7 @@
{
int i;
- explicit A(int d = 0) : i(d) {}
+ explicit A(int d = 0) noexcept {i=d;}
friend bool operator==(const A& x, const A& y)
{return x.i == y.i;}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits