// 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 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. // Issue 22443: Reject code using non-regular types that would // otherwise cause dropck to loop infinitely. // // This version is just checking that we still sanely handle a trivial // wrapper around the non-regular type. (It also demonstrates how the // error messages will report different types depending on which type // dropck is analyzing.) use std::marker::PhantomData; struct Digit { elem: T } struct Node { m: PhantomData<&'static T> } enum FingerTree { Single(T), // According to the bug report, Digit before Box would infinite loop. Deep( Digit, Box>>, ) } enum Wrapper { Simple, Other(FingerTree), } fn main() { let w = //~ ERROR overflow while adding drop-check rules for std::option Some(Wrapper::Simple::); //~^ ERROR overflow while adding drop-check rules for std::option::Option //~| ERROR overflow while adding drop-check rules for Wrapper }