c++: Add 5 unfixed tests.
A couple of dg-ice tests. 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.
This commit is contained in:
parent
f7c41c572b
commit
a210d404d0
5 changed files with 101 additions and 0 deletions
37
gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C
Normal file
37
gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C
Normal file
|
@ -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);
|
||||
}
|
14
gcc/testsuite/g++.dg/cpp0x/vt-88982.C
Normal file
14
gcc/testsuite/g++.dg/cpp0x/vt-88982.C
Normal file
|
@ -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;
|
25
gcc/testsuite/g++.dg/cpp1z/class-deduction76.C
Normal file
25
gcc/testsuite/g++.dg/cpp1z/class-deduction76.C
Normal file
|
@ -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>));
|
13
gcc/testsuite/g++.dg/cpp1z/constexpr-lambda26.C
Normal file
13
gcc/testsuite/g++.dg/cpp1z/constexpr-lambda26.C
Normal file
|
@ -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()> { }; }; }
|
12
gcc/testsuite/g++.dg/cpp2a/nontype-class39.C
Normal file
12
gcc/testsuite/g++.dg/cpp2a/nontype-class39.C
Normal file
|
@ -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>;
|
Loading…
Add table
Reference in a new issue