PR other/90695 reduce testcase to remove library dependency
authorJonathan Wakely <jwakely@redhat.com>
Mon, 10 Jun 2019 15:55:36 +0000 (16:55 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 10 Jun 2019 15:55:36 +0000 (16:55 +0100)
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

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/noexcept15.C

index 191fec2f7b029f2d22a4a2a6e965641e26a6db0c..ede0ec50a314bd64427f4f07ce6027f420c0e76f 100644 (file)
@@ -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.
index 5cbbea8a91a42757fc697a61e44d8be70550cfe3..6c6eef689153c3791da997ac6ccdf69fc26f03cb 100644 (file)
@@ -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" }