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:
Marek Polacek 2020-11-10 14:57:19 -05:00
parent f7c41c572b
commit a210d404d0
5 changed files with 101 additions and 0 deletions

View 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);
}

View 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;

View 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>));

View 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()> { }; }; }

View 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>;