Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
72b9707
commit d3d2fc5
Showing
3 changed files
with
148 additions
and
0 deletions.
There are no files selected for viewing
39 changes: 39 additions & 0 deletions
39
src/test/compile-fail/associated-types/cache/chrono-scan.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,39 @@ | ||
// Copyright 2012-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. | ||
|
||
#![feature(rustc_attrs)] | ||
#![allow(warnings)] | ||
|
||
pub type ParseResult<T> = Result<T, ()>; | ||
|
||
pub enum Item<'a> { Literal(&'a str), | ||
} | ||
|
||
pub fn colon_or_space(s: &str) -> ParseResult<&str> { | ||
unimplemented!() | ||
} | ||
|
||
pub fn timezone_offset_zulu<F>(s: &str, colon: F) -> ParseResult<(&str, i32)> | ||
where F: FnMut(&str) -> ParseResult<&str> { | ||
unimplemented!() | ||
} | ||
|
||
pub fn parse<'a, I>(mut s: &str, items: I) -> ParseResult<()> | ||
where I: Iterator<Item=Item<'a>> { | ||
macro_rules! try_consume { | ||
($e:expr) => ({ let (s_, v) = try!($e); s = s_; v }) | ||
} | ||
let offset = try_consume!(timezone_offset_zulu(s.trim_left(), colon_or_space)); | ||
let offset = try_consume!(timezone_offset_zulu(s.trim_left(), colon_or_space)); | ||
Ok(()) | ||
} | ||
|
||
#[rustc_error] | ||
fn main() { } //~ ERROR compilation successful |
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,34 @@ | ||
// Copyright 2014 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. | ||
|
||
#![feature(rustc_attrs)] | ||
#![allow(warnings)] | ||
|
||
// Check that you are allowed to implement using elision but write | ||
// trait without elision (a bug in this cropped up during | ||
// bootstrapping, so this is a regression test). | ||
|
||
pub struct SplitWhitespace<'a> { | ||
x: &'a u8 | ||
} | ||
|
||
pub trait UnicodeStr { | ||
fn split_whitespace<'a>(&'a self) -> SplitWhitespace<'a>; | ||
} | ||
|
||
impl UnicodeStr for str { | ||
#[inline] | ||
fn split_whitespace(&self) -> SplitWhitespace { | ||
unimplemented!() | ||
} | ||
} | ||
|
||
#[rustc_error] | ||
fn main() { } //~ ERROR compilation successful |
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,75 @@ | ||
// 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 #31849: the problem here was actually a performance | ||
// cliff, but I'm adding the test for reference. | ||
|
||
pub trait Upcast<T> { | ||
fn upcast(self) -> T; | ||
} | ||
|
||
impl<S1, S2, T1, T2> Upcast<(T1, T2)> for (S1,S2) | ||
where S1: Upcast<T1>, | ||
S2: Upcast<T2>, | ||
{ | ||
fn upcast(self) -> (T1, T2) { (self.0.upcast(), self.1.upcast()) } | ||
} | ||
|
||
impl Upcast<()> for () | ||
{ | ||
fn upcast(self) -> () { () } | ||
} | ||
|
||
pub trait ToStatic { | ||
type Static: 'static; | ||
fn to_static(self) -> Self::Static where Self: Sized; | ||
} | ||
|
||
impl<T, U> ToStatic for (T, U) | ||
where T: ToStatic, | ||
U: ToStatic | ||
{ | ||
type Static = (T::Static, U::Static); | ||
fn to_static(self) -> Self::Static { (self.0.to_static(), self.1.to_static()) } | ||
} | ||
|
||
impl ToStatic for () | ||
{ | ||
type Static = (); | ||
fn to_static(self) -> () { () } | ||
} | ||
|
||
|
||
trait Factory { | ||
type Output; | ||
fn build(&self) -> Self::Output; | ||
} | ||
|
||
impl<S,T> Factory for (S, T) | ||
where S: Factory, | ||
T: Factory, | ||
S::Output: ToStatic, | ||
<S::Output as ToStatic>::Static: Upcast<S::Output>, | ||
{ | ||
type Output = (S::Output, T::Output); | ||
fn build(&self) -> Self::Output { (self.0.build().to_static().upcast(), self.1.build()) } | ||
} | ||
|
||
impl Factory for () { | ||
type Output = (); | ||
fn build(&self) -> Self::Output { () } | ||
} | ||
|
||
fn main() { | ||
// More parens, more time. | ||
let it = ((((((((((),()),()),()),()),()),()),()),()),()); | ||
it.build(); | ||
} | ||
|