Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
const fn: allow use of trait impls from bounds
- Loading branch information
1 parent
71d350e
commit e69fcea
Showing
6 changed files
with
129 additions
and
4 deletions.
There are no files selected for viewing
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
11 changes: 11 additions & 0 deletions
11
src/test/ui/rfc-2632-const-trait-impl/call-generic-method-fail.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,11 @@ | ||
#![feature(const_fn)] | ||
#![feature(const_trait_impl)] | ||
#![feature(const_trait_bound_opt_out)] | ||
#![allow(incomplete_features)] | ||
|
||
pub const fn equals_self<T: ?const PartialEq>(t: &T) -> bool { | ||
*t == *t | ||
//~^ ERROR calls in constant functions are limited to constant functions | ||
} | ||
|
||
fn main() {} |
9 changes: 9 additions & 0 deletions
9
src/test/ui/rfc-2632-const-trait-impl/call-generic-method-fail.stderr
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,9 @@ | ||
error[E0015]: calls in constant functions are limited to constant functions, tuple structs and tuple variants | ||
--> $DIR/call-generic-method-fail.rs:7:5 | ||
| | ||
LL | *t == *t | ||
| ^^^^^^^^ | ||
|
||
error: aborting due to previous error | ||
|
||
For more information about this error, try `rustc --explain E0015`. |
24 changes: 24 additions & 0 deletions
24
src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst-opt-out.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,24 @@ | ||
// check-pass | ||
|
||
#![feature(const_fn)] | ||
#![feature(const_trait_impl)] | ||
#![feature(const_trait_bound_opt_out)] | ||
#![allow(incomplete_features)] | ||
|
||
struct S; | ||
|
||
impl PartialEq for S { | ||
fn eq(&self, _: &S) -> bool { | ||
true | ||
} | ||
} | ||
|
||
const fn equals_self<T: ?const PartialEq>(t: &T) -> bool { | ||
true | ||
} | ||
|
||
pub const EQ: bool = equals_self(&S); | ||
|
||
// Calling `equals_self` with a type that only has a non-const impl is fine, because we opted out. | ||
|
||
fn main() {} |
26 changes: 26 additions & 0 deletions
26
src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.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,26 @@ | ||
// FIXME(jschievink): this is not rejected correctly (only when the non-const impl is actually used) | ||
// ignore-test | ||
|
||
#![feature(const_fn)] | ||
#![feature(const_trait_impl)] | ||
#![allow(incomplete_features)] | ||
|
||
struct S; | ||
|
||
impl PartialEq for S { | ||
fn eq(&self, _: &S) -> bool { | ||
true | ||
} | ||
} | ||
|
||
const fn equals_self<T: PartialEq>(t: &T) -> bool { | ||
true | ||
} | ||
|
||
// Calling `equals_self` with something that has a non-const impl should throw an error, despite | ||
// it not using the impl. | ||
|
||
pub const EQ: bool = equals_self(&S); | ||
//~^ ERROR | ||
|
||
fn main() {} |
23 changes: 23 additions & 0 deletions
23
src/test/ui/rfc-2632-const-trait-impl/call-generic-method-pass.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,23 @@ | ||
//! Basic test for calling methods on generic type parameters in `const fn`. | ||
|
||
// check-pass | ||
|
||
#![feature(const_fn)] | ||
#![feature(const_trait_impl)] | ||
#![allow(incomplete_features)] | ||
|
||
struct S; | ||
|
||
impl const PartialEq for S { | ||
fn eq(&self, _: &S) -> bool { | ||
true | ||
} | ||
} | ||
|
||
const fn equals_self<T: PartialEq>(t: &T) -> bool { | ||
*t == *t | ||
} | ||
|
||
pub const EQ: bool = equals_self(&S); | ||
|
||
fn main() {} |