forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 1
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
Showing
15 changed files
with
220 additions
and
54 deletions.
There are no files selected for viewing
31 changes: 31 additions & 0 deletions
31
src/test/compile-fail/associated-types-no-suitable-supertrait-2.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 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. | ||
|
||
// Check that we get an error when you use `<Self as Get>::Value` in | ||
// the trait definition but `Self` does not, in fact, implement `Get`. | ||
// | ||
// See also associated-types-no-suitable-supertrait.rs, which checks | ||
// that we see the same error when making this mistake on an impl | ||
// rather than the default method impl. | ||
// | ||
// See also run-pass/associated-types-projection-to-unrelated-trait.rs, | ||
// which checks that the trait interface itself is not considered an | ||
// error as long as all impls satisfy the constraint. | ||
|
||
trait Get : ::std::marker::MarkerTrait { | ||
type Value; | ||
} | ||
|
||
trait Other { | ||
fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) {} | ||
//~^ ERROR the trait `Get` is not implemented for the type `Self` | ||
} | ||
|
||
fn main() { } |
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
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 2012 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. | ||
|
||
// Tests that enum-to-float casts are disallowed. | ||
|
||
enum E { | ||
L0 = -1, | ||
H0 = 1 | ||
} | ||
|
||
enum F { | ||
L1 = 1, | ||
H1 = 0xFFFFFFFFFFFFFFFF | ||
} | ||
|
||
pub fn main() { | ||
let a = E::L0 as f32; //~ ERROR illegal cast | ||
let c = F::H1 as f32; //~ ERROR illegal cast | ||
assert_eq!(a, -1.0f32); | ||
assert_eq!(c, -1.0f32); | ||
} |
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
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
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
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
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
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
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 2013 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. | ||
|
||
// Check that `base` in `Fru { field: expr, ..base }` must have right type. | ||
// | ||
// See also struct-base-wrong-type.rs, which tests same condition | ||
// within a const expression. | ||
|
||
struct Foo { a: isize, b: isize } | ||
struct Bar { x: isize } | ||
|
||
fn main() { | ||
let b = Bar { x: 5 }; | ||
let f = Foo { a: 2, ..b }; //~ ERROR mismatched types | ||
//~| expected `Foo` | ||
//~| found `Bar` | ||
//~| expected struct `Foo` | ||
//~| found struct `Bar` | ||
let f__isize = Foo { a: 2, ..4 }; //~ ERROR mismatched types | ||
//~| expected `Foo` | ||
//~| found `_` | ||
//~| expected struct `Foo` | ||
//~| found integral variable | ||
} |
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
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,43 @@ | ||
// Copyright 2013 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. | ||
|
||
extern { | ||
fn foo(f: isize, x: u8, ...); | ||
} | ||
|
||
extern "C" fn bar(f: isize, x: u8) {} | ||
|
||
fn main() { | ||
unsafe { | ||
foo(); //~ ERROR: this function takes at least 2 parameters but 0 parameters were supplied | ||
foo(1); //~ ERROR: this function takes at least 2 parameters but 1 parameter was supplied | ||
|
||
let x: unsafe extern "C" fn(f: isize, x: u8) = foo; | ||
//~^ ERROR: mismatched types | ||
//~| expected `unsafe extern "C" fn(isize, u8)` | ||
//~| found `unsafe extern "C" fn(isize, u8, ...)` | ||
//~| expected non-variadic fn | ||
//~| found variadic function | ||
|
||
let y: extern "C" fn(f: isize, x: u8, ...) = bar; | ||
//~^ ERROR: mismatched types | ||
//~| expected `extern "C" fn(isize, u8, ...)` | ||
//~| found `extern "C" fn(isize, u8) {bar}` | ||
//~| expected variadic fn | ||
//~| found non-variadic function | ||
|
||
foo(1, 2, 3f32); //~ ERROR: can't pass an f32 to variadic function, cast to c_double | ||
foo(1, 2, true); //~ ERROR: can't pass bool to variadic function, cast to c_int | ||
foo(1, 2, 1i8); //~ ERROR: can't pass i8 to variadic function, cast to c_int | ||
foo(1, 2, 1u8); //~ ERROR: can't pass u8 to variadic function, cast to c_uint | ||
foo(1, 2, 1i16); //~ ERROR: can't pass i16 to variadic function, cast to c_int | ||
foo(1, 2, 1u16); //~ ERROR: can't pass u16 to variadic function, cast to c_uint | ||
} | ||
} |
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
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
43 changes: 43 additions & 0 deletions
43
src/test/run-pass/associated-types-projection-to-unrelated-trait.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,43 @@ | ||
// 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. | ||
|
||
// Check that we do not get an error when you use `<Self as Get>::Value` in | ||
// the trait definition if there is no default method and for every impl, | ||
// `Self` does implement `Get`. | ||
// | ||
// See also compile-fail tests associated-types-no-suitable-supertrait | ||
// and associated-types-no-suitable-supertrait-2, which show how small | ||
// variants of the code below can fail. | ||
|
||
trait Get { | ||
type Value; | ||
} | ||
|
||
trait Other { | ||
fn okay<U:Get>(&self, foo: U, bar: <Self as Get>::Value); | ||
} | ||
|
||
impl Get for () { | ||
type Value = f32; | ||
} | ||
|
||
impl Get for f64 { | ||
type Value = u32; | ||
} | ||
|
||
impl Other for () { | ||
fn okay<U:Get>(&self, _foo: U, _bar: <Self as Get>::Value) { } | ||
} | ||
|
||
impl Other for f64 { | ||
fn okay<U:Get>(&self, _foo: U, _bar: <Self as Get>::Value) { } | ||
} | ||
|
||
fn main() { } |