/src/test/compile-fail/issue-22638.rs
https://gitlab.com/jianglu/rust · Rust · 69 lines · 48 code · 11 blank · 10 comment · 1 complexity · 4ab2f3e492163b50cf05f055013ce85c MD5 · raw file
- // Copyright 2015 The Rust Project Developers. See the COPYRIGHT
- // file at the top-level directory of this distribution and at
- // http://rust-lang.org/COPYRIGHT.
- //
- // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
- // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
- // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
- // option. This file may not be copied, modified, or distributed
- // except according to those terms.
- #![allow(unused)]
- #![recursion_limit = "20"]
- #![type_length_limit = "20000000"]
- #![crate_type = "rlib"]
- #[derive(Clone)]
- struct A (B);
- impl A {
- pub fn matches<F: Fn()>(&self, f: &F) {
- let &A(ref term) = self;
- term.matches(f);
- }
- }
- #[derive(Clone)]
- enum B {
- Variant1,
- Variant2(C),
- }
- impl B {
- pub fn matches<F: Fn()>(&self, f: &F) {
- match self {
- &B::Variant2(ref factor) => {
- factor.matches(&|| ())
- }
- _ => unreachable!("")
- }
- }
- }
- #[derive(Clone)]
- struct C (D);
- impl C {
- pub fn matches<F: Fn()>(&self, f: &F) {
- let &C(ref base) = self;
- base.matches(&|| {
- C(base.clone()).matches(f)
- })
- }
- }
- #[derive(Clone)]
- struct D (Box<A>);
- impl D {
- pub fn matches<F: Fn()>(&self, f: &F) {
- //~^ ERROR reached the type-length limit while instantiating `D::matches::<[closure
- let &D(ref a) = self;
- a.matches(f)
- }
- }
- pub fn matches() {
- A(B::Variant1).matches(&(|| ()))
- }