diff mbox series

[pushed] c++: Add 5 unfixed tests.

Message ID 20201110200351.1377548-1-polacek@redhat.com
State New
Headers show
Series [pushed] c++: Add 5 unfixed tests. | expand

Commit Message

Marek Polacek Nov. 10, 2020, 8:03 p.m. UTC
A couple of dg-ice tests.

Tested x86_64-pc-linux-gnu, applying to trunk.

gcc/testsuite/ChangeLog:

	PR c++/52830
	PR c++/88982
	PR c++/90799
	PR c++/87765
	PR c++/89565
	* g++.dg/cpp0x/constexpr-52830.C: New test.
	* g++.dg/cpp0x/vt-88982.C: New test.
	* g++.dg/cpp1z/class-deduction76.C: New test.
	* g++.dg/cpp1z/constexpr-lambda26.C: New test.
	* g++.dg/cpp2a/nontype-class39.C: New test.
---
 gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C  | 37 +++++++++++++++++++
 gcc/testsuite/g++.dg/cpp0x/vt-88982.C         | 14 +++++++
 .../g++.dg/cpp1z/class-deduction76.C          | 25 +++++++++++++
 .../g++.dg/cpp1z/constexpr-lambda26.C         | 13 +++++++
 gcc/testsuite/g++.dg/cpp2a/nontype-class39.C  | 12 ++++++
 5 files changed, 101 insertions(+)
 create mode 100644 gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C
 create mode 100644 gcc/testsuite/g++.dg/cpp0x/vt-88982.C
 create mode 100644 gcc/testsuite/g++.dg/cpp1z/class-deduction76.C
 create mode 100644 gcc/testsuite/g++.dg/cpp1z/constexpr-lambda26.C
 create mode 100644 gcc/testsuite/g++.dg/cpp2a/nontype-class39.C


base-commit: 8b9a92f794b8ad8011e6beb11a609efa635c4600
diff mbox series

Patch

diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C
new file mode 100644
index 00000000000..2c9d2f9b329
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C
@@ -0,0 +1,37 @@ 
+// PR c++/52830
+// { dg-do compile { target c++11 } }
+// { dg-ice "comptypes" }
+
+template<bool b> struct eif { typedef void type; };
+template<>       struct eif<false> {};
+
+template<class A, class B> struct same
+{
+  static constexpr bool value = false;
+};
+template<class A>
+struct same<A, A>
+{
+  static constexpr bool value = true;
+};
+
+
+struct foo {
+  template<class T>
+  void func(T && a,
+            typename eif<same<decltype(a), int&&>::value>::type * = 0);
+};
+
+template<class T>
+void
+foo::
+func(T && a,
+     typename eif<same<decltype(a), int&&>::value>::type * )
+{
+}
+
+void do_stuff()
+{
+  foo f;
+  f.func(12);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-88982.C b/gcc/testsuite/g++.dg/cpp0x/vt-88982.C
new file mode 100644
index 00000000000..cb9530dcee1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/vt-88982.C
@@ -0,0 +1,14 @@ 
+// PR c++/88982
+// { dg-do compile { target c++11 } }
+// { dg-ice "tsubst_pack_expansion" }
+
+template<typename...Ts> struct A {
+  template<template<typename, Ts = 0> class ...Cs, Cs<Ts> ...Vs> struct B {
+    B() {
+    }
+  };
+};
+
+template<typename, int> using Int = int;
+template<typename, short> using Char = char;
+A<int, short>::B<Int, Char> b;
diff --git a/gcc/testsuite/g++.dg/cpp1z/class-deduction76.C b/gcc/testsuite/g++.dg/cpp1z/class-deduction76.C
new file mode 100644
index 00000000000..23bb6e8fa9a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/class-deduction76.C
@@ -0,0 +1,25 @@ 
+// PR c++/90799
+// { dg-do compile { target c++17 } }
+// { dg-ice "unify" }
+
+template<class T>
+void foo() noexcept(T::value);
+
+struct S {
+    static constexpr const bool value = true;
+
+    template<class T>
+    void bar() noexcept(T::value);
+};
+
+template<class... Args, bool is_noexcept>
+constexpr bool is_noexcept_function(void(Args...) noexcept(is_noexcept)) noexcept {
+    return is_noexcept;
+}
+
+template<class... Args, bool is_noexcept>
+constexpr bool is_noexcept_member_function(void(S::*)(Args...) noexcept(is_noexcept)) noexcept {
+    return is_noexcept;
+}
+
+static_assert(is_noexcept_function(foo<S>));
diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda26.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda26.C
new file mode 100644
index 00000000000..d6c8bae525f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda26.C
@@ -0,0 +1,13 @@ 
+// PR c++/87765
+// { dg-do compile { target c++17 } }
+// { dg-ice "cxx_eval_constant_expression" }
+
+template <int N>
+using foo = int;
+
+struct A {
+  constexpr int bar() const { return 42; }
+};
+
+void baz(A a) {
+  [=](auto c) { return foo<a.bar()> { }; }; }
diff --git a/gcc/testsuite/g++.dg/cpp2a/nontype-class39.C b/gcc/testsuite/g++.dg/cpp2a/nontype-class39.C
new file mode 100644
index 00000000000..f5f79a71ec2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/nontype-class39.C
@@ -0,0 +1,12 @@ 
+// PR c++/89565
+// { dg-do compile { target c++20 } }
+// { dg-ice "resolve_args" }
+
+template <auto>
+struct N{};
+
+template <N>
+struct S {};
+
+template <typename T>
+using NS = S<T::value>;