Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
- Loading branch information
1 parent
8c14649
commit 4fbb71f
Showing
3 changed files
with
84 additions
and
0 deletions.
There are no files selected for viewing
28 changes: 28 additions & 0 deletions
28
src/test/compile-fail/traits-inductive-overflow-supertrait-oibit.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// 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. | ||
|
||
// OIBIT-based version of #29859, supertrait version. Test that using | ||
// a simple OIBIT `..` impl alone still doesn't allow arbitary bounds | ||
// to be synthesized. | ||
|
||
#![feature(optin_builtin_traits)] | ||
|
||
trait Magic: Copy {} | ||
impl Magic for .. {} | ||
|
||
fn copy<T: Magic>(x: T) -> (T, T) { (x, x) } | ||
|
||
#[derive(Debug)] | ||
struct NoClone; | ||
|
||
fn main() { | ||
let (a, b) = copy(NoClone); //~ ERROR E0277 | ||
println!("{:?} {:?}", a, b); | ||
} |
25 changes: 25 additions & 0 deletions
25
src/test/compile-fail/traits-inductive-overflow-supertrait.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// 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. | ||
|
||
// Regression test for #29859, supertrait version. This example | ||
// allowed arbitrary trait bounds to be synthesized. | ||
|
||
trait Magic: Copy {} | ||
impl<T: Magic> Magic for T {} | ||
|
||
fn copy<T: Magic>(x: T) -> (T, T) { (x, x) } | ||
|
||
#[derive(Debug)] | ||
struct NoClone; | ||
|
||
fn main() { | ||
let (a, b) = copy(NoClone); //~ ERROR E0275 | ||
println!("{:?} {:?}", a, b); | ||
} |
31 changes: 31 additions & 0 deletions
31
src/test/compile-fail/traits-inductive-overflow-two-traits.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
// 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. | ||
|
||
// Regression test for #29859, initial version. This example allowed | ||
// arbitrary trait bounds to be synthesized. | ||
|
||
// Trait that you want all types to implement. | ||
use std::marker::{Sync as Trait}; | ||
|
||
pub trait Magic { | ||
type X: Trait; | ||
} | ||
impl<T: Magic> Magic for T { | ||
type X = Self; | ||
} | ||
|
||
fn check<T: Trait>() {} | ||
|
||
fn wizard<T: Magic>() { check::<<T as Magic>::X>(); } | ||
|
||
fn main() { | ||
wizard::<*mut ()>(); //~ ERROR E0275 | ||
// check::<*mut ()>(); | ||
} |