aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-06-10 16:55:36 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2019-06-10 16:55:36 +0100
commit39d1184ba813eaabd366d9e8cdd7d19f4fdbd9e8 (patch)
tree4f6011378bfa4a19da017d296473a0052864ba1e
parent97623b520bfe0d1f1bf554c50ed14483240db321 (diff)
downloadgcc-39d1184ba813eaabd366d9e8cdd7d19f4fdbd9e8.zip
gcc-39d1184ba813eaabd366d9e8cdd7d19f4fdbd9e8.tar.gz
gcc-39d1184ba813eaabd366d9e8cdd7d19f4fdbd9e8.tar.bz2
PR other/90695 reduce testcase to remove library dependency
This reproduces the original ICE fixed by r178857 (tested at r178852 and r178860), without depending on a libstdc++ header that keeps changing. The number of errors differs between C++14 and C++17 modes, so the fixed test uses dg-excess-errors to match any number of them. The precise errors aren't what's being tested for here anyway, the point of the test is to verify the ICE in PR 50391 is fixed. PR other/90695 * g++.dg/cpp0x/noexcept15.C: Remove dependency on library header. From-SVN: r272121
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept15.C40
2 files changed, 43 insertions, 2 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 191fec2f..ede0ec5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-06-10 Jonathan Wakely <jwakely@redhat.com>
+
+ PR other/90695
+ * g++.dg/cpp0x/noexcept15.C: Remove dependency on library header.
+
2019-06-10 Jakub Jelinek <jakub@redhat.com>
* c-c++-common/gomp/scan-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept15.C b/gcc/testsuite/g++.dg/cpp0x/noexcept15.C
index 5cbbea8..6c6eef6 100644
--- a/gcc/testsuite/g++.dg/cpp0x/noexcept15.C
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept15.C
@@ -1,12 +1,46 @@
// PR c++/50391
// { dg-do compile { target c++11 } }
-#include <type_traits>
+namespace std
+{
+ template<typename T, T Val>
+ struct integral_constant
+ { static constexpr T value = Val; };
+
+ template<typename T>
+ struct is_abstract
+ : integral_constant<bool, __is_abstract(T)>
+ { };
+
+ template<typename T, bool = is_abstract<T>::value>
+ struct is_destructible
+ : integral_constant<bool, true>
+ { };
+
+ template<typename T>
+ struct is_destructible<T, true>
+ : integral_constant<bool, false>
+ { };
+
+ template<typename T>
+ struct is_nothrow_move_constructible
+ : is_destructible<T>
+ { };
+
+ template<typename T>
+ struct decay
+ { typedef T type; };
+
+ template<typename T>
+ struct decay<T&>
+ { typedef T type; };
+
+} // std
template<class Tp>
struct single
{
- Tp elem; // { dg-error "incomplete type" }
+ Tp elem;
constexpr single(const Tp& e)
: elem(e) { }
@@ -30,3 +64,5 @@ foo(Blob *b)
{
make_single(*b);
}
+
+// { dg-excess-errors "incomplete type|not a member" }