Delegation: fix ICE on wrong instantiation
This commit is contained in:
parent
10a7aa14fe
commit
0cd9708de6
@ -2212,6 +2212,17 @@ fn check_delegation_constraints(&self, sig_id: DefId, span: Span, emit: bool) ->
|
|||||||
try_emit("delegation with early bound generics");
|
try_emit("delegation with early bound generics");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// There is no way to instantiate `Self` param for caller if
|
||||||
|
// 1. callee is a trait method
|
||||||
|
// 2. delegation item isn't an associative item
|
||||||
|
if let DefKind::AssocFn = self.tcx().def_kind(sig_id)
|
||||||
|
&& let DefKind::Fn = self.tcx().def_kind(self.item_def_id())
|
||||||
|
&& self.tcx().associated_item(sig_id).container
|
||||||
|
== ty::AssocItemContainer::TraitContainer
|
||||||
|
{
|
||||||
|
try_emit("delegation to a trait method from a free function");
|
||||||
|
}
|
||||||
|
|
||||||
if self.tcx().asyncness(sig_id) == ty::Asyncness::Yes {
|
if self.tcx().asyncness(sig_id) == ty::Asyncness::Yes {
|
||||||
try_emit("delegation to async functions");
|
try_emit("delegation to async functions");
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#![feature(fn_delegation)]
|
#![feature(fn_delegation)]
|
||||||
//~^ WARN the feature `fn_delegation` is incomplete
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
trait Trait {
|
trait Trait {
|
||||||
const C: u32 = 0;
|
const C: u32 = 0;
|
||||||
@ -34,14 +34,6 @@ impl Trait for S {
|
|||||||
|
|
||||||
reuse foo { &self.0 }
|
reuse foo { &self.0 }
|
||||||
//~^ ERROR cannot find function `foo` in this scope
|
//~^ ERROR cannot find function `foo` in this scope
|
||||||
reuse F::foo { &self.0 }
|
|
||||||
//~^ ERROR cannot find function `foo` in `F`
|
|
||||||
//~| ERROR duplicate definitions with name `foo`
|
|
||||||
}
|
|
||||||
|
|
||||||
impl S {
|
|
||||||
reuse F::foo { &self.0 }
|
|
||||||
//~^ ERROR cannot find function `foo` in `F`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -25,18 +25,6 @@ LL | reuse <F as Trait>::baz;
|
|||||||
| | help: there is an associated function with a similar name: `bar`
|
| | help: there is an associated function with a similar name: `bar`
|
||||||
| not a member of trait `Trait`
|
| not a member of trait `Trait`
|
||||||
|
|
||||||
error[E0201]: duplicate definitions with name `foo`:
|
|
||||||
--> $DIR/bad-resolve.rs:37:5
|
|
||||||
|
|
|
||||||
LL | fn foo(&self, x: i32) -> i32 { x }
|
|
||||||
| ---------------------------------- item in trait
|
|
||||||
...
|
|
||||||
LL | reuse foo { &self.0 }
|
|
||||||
| --------------------- previous definition here
|
|
||||||
LL |
|
|
||||||
LL | reuse F::foo { &self.0 }
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ duplicate definition
|
|
||||||
|
|
||||||
error[E0423]: expected function, found associated constant `Trait::C`
|
error[E0423]: expected function, found associated constant `Trait::C`
|
||||||
--> $DIR/bad-resolve.rs:24:11
|
--> $DIR/bad-resolve.rs:24:11
|
||||||
|
|
|
|
||||||
@ -66,27 +54,6 @@ error[E0425]: cannot find function `foo` in this scope
|
|||||||
LL | reuse foo { &self.0 }
|
LL | reuse foo { &self.0 }
|
||||||
| ^^^ not found in this scope
|
| ^^^ not found in this scope
|
||||||
|
|
||||||
error[E0425]: cannot find function `foo` in `F`
|
|
||||||
--> $DIR/bad-resolve.rs:37:14
|
|
||||||
|
|
|
||||||
LL | reuse F::foo { &self.0 }
|
|
||||||
| ^^^ not found in `F`
|
|
||||||
|
|
||||||
error[E0425]: cannot find function `foo` in `F`
|
|
||||||
--> $DIR/bad-resolve.rs:43:14
|
|
||||||
|
|
|
||||||
LL | reuse F::foo { &self.0 }
|
|
||||||
| ^^^ not found in `F`
|
|
||||||
|
|
||||||
warning: the feature `fn_delegation` is incomplete and may not be safe to use and/or cause compiler crashes
|
|
||||||
--> $DIR/bad-resolve.rs:1:12
|
|
||||||
|
|
|
||||||
LL | #![feature(fn_delegation)]
|
|
||||||
| ^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
|
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
|
||||||
|
|
||||||
error[E0046]: not all trait items implemented, missing: `Type`
|
error[E0046]: not all trait items implemented, missing: `Type`
|
||||||
--> $DIR/bad-resolve.rs:22:1
|
--> $DIR/bad-resolve.rs:22:1
|
||||||
|
|
|
|
||||||
@ -96,7 +63,7 @@ LL | type Type;
|
|||||||
LL | impl Trait for S {
|
LL | impl Trait for S {
|
||||||
| ^^^^^^^^^^^^^^^^ missing `Type` in implementation
|
| ^^^^^^^^^^^^^^^^ missing `Type` in implementation
|
||||||
|
|
||||||
error: aborting due to 11 previous errors; 1 warning emitted
|
error: aborting due to 8 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0046, E0201, E0324, E0407, E0423, E0425, E0575, E0576.
|
Some errors have detailed explanations: E0046, E0324, E0407, E0423, E0425, E0575, E0576.
|
||||||
For more information about an error, try `rustc --explain E0046`.
|
For more information about an error, try `rustc --explain E0046`.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#![feature(fn_delegation)]
|
#![feature(fn_delegation)]
|
||||||
//~^ WARN the feature `fn_delegation` is incomplete
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
trait Trait {
|
trait Trait {
|
||||||
fn foo(&self) -> u32 { 0 }
|
fn foo(&self) -> u32 { 0 }
|
||||||
|
@ -9,15 +9,6 @@ LL | reuse to_reuse::foo { self }
|
|||||||
LL | reuse Trait::foo;
|
LL | reuse Trait::foo;
|
||||||
| ^^^^^^^^^^^^^^^^^ duplicate definition
|
| ^^^^^^^^^^^^^^^^^ duplicate definition
|
||||||
|
|
||||||
warning: the feature `fn_delegation` is incomplete and may not be safe to use and/or cause compiler crashes
|
error: aborting due to 1 previous error
|
||||||
--> $DIR/duplicate-definition-inside-trait-impl.rs:1:12
|
|
||||||
|
|
|
||||||
LL | #![feature(fn_delegation)]
|
|
||||||
| ^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
|
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
|
||||||
|
|
||||||
error: aborting due to 1 previous error; 1 warning emitted
|
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0201`.
|
For more information about this error, try `rustc --explain E0201`.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//@ run-pass
|
//@ run-pass
|
||||||
|
|
||||||
#![feature(fn_delegation)]
|
#![feature(fn_delegation)]
|
||||||
//~^ WARN the feature `fn_delegation` is incomplete
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
trait ToReuse {
|
trait ToReuse {
|
||||||
fn foo(&self, x: i32) -> i32 { x }
|
fn foo(&self, x: i32) -> i32 { x }
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
warning: the feature `fn_delegation` is incomplete and may not be safe to use and/or cause compiler crashes
|
|
||||||
--> $DIR/explicit-paths-in-traits-pass.rs:3:12
|
|
||||||
|
|
|
||||||
LL | #![feature(fn_delegation)]
|
|
||||||
| ^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
|
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
|
||||||
|
|
||||||
warning: 1 warning emitted
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
//@ run-pass
|
//@ run-pass
|
||||||
|
|
||||||
#![feature(fn_delegation)]
|
#![feature(fn_delegation)]
|
||||||
//~^ WARN the feature `fn_delegation` is incomplete
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
trait Trait {
|
trait Trait {
|
||||||
fn bar(&self, x: i32) -> i32 { x }
|
fn bar(&self, x: i32) -> i32 { x }
|
||||||
@ -10,7 +10,6 @@ fn description(&self) -> &str {
|
|||||||
}
|
}
|
||||||
fn static_method(x: i32) -> i32 { x }
|
fn static_method(x: i32) -> i32 { x }
|
||||||
fn static_method2(x: i32, y: i32) -> i32 { x + y }
|
fn static_method2(x: i32, y: i32) -> i32 { x + y }
|
||||||
fn baz<'a>(&self, x: &'a i32) -> &'a i32 { x }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct F;
|
struct F;
|
||||||
@ -29,11 +28,9 @@ impl Trait for S {
|
|||||||
reuse Trait::description { &self.0 }
|
reuse Trait::description { &self.0 }
|
||||||
reuse <F as Trait>::static_method;
|
reuse <F as Trait>::static_method;
|
||||||
reuse <F as Trait>::static_method2 { S::static_method(self) }
|
reuse <F as Trait>::static_method2 { S::static_method(self) }
|
||||||
reuse Trait::baz { &self.0 }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl S {
|
impl S {
|
||||||
reuse Trait::baz { &self.0 }
|
|
||||||
reuse <F as Trait>::static_method { to_reuse::foo(self) }
|
reuse <F as Trait>::static_method { to_reuse::foo(self) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,16 +46,8 @@ fn main() {
|
|||||||
assert_eq!(42, <S as Trait>::static_method(42));
|
assert_eq!(42, <S as Trait>::static_method(42));
|
||||||
assert_eq!(21, S::static_method2(10, 10));
|
assert_eq!(21, S::static_method2(10, 10));
|
||||||
|
|
||||||
reuse <S as Trait>::static_method;
|
|
||||||
reuse <S as Trait>::static_method2 { static_method(self) }
|
|
||||||
#[inline]
|
#[inline]
|
||||||
reuse to_reuse::foo;
|
reuse to_reuse::foo;
|
||||||
assert_eq!(42, static_method(42));
|
|
||||||
assert_eq!(21, static_method2(10, 10));
|
|
||||||
assert_eq!(43, foo(42));
|
assert_eq!(43, foo(42));
|
||||||
assert_eq!(15, zero_args());
|
assert_eq!(15, zero_args());
|
||||||
|
|
||||||
let x: i32 = 15;
|
|
||||||
assert_eq!(&x, <S as Trait>::baz(&s, &x));
|
|
||||||
assert_eq!(&x, S::baz(&s, &x));
|
|
||||||
}
|
}
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
warning: the feature `fn_delegation` is incomplete and may not be safe to use and/or cause compiler crashes
|
|
||||||
--> $DIR/explicit-paths-pass.rs:3:12
|
|
||||||
|
|
|
||||||
LL | #![feature(fn_delegation)]
|
|
||||||
| ^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
|
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
|
||||||
|
|
||||||
warning: 1 warning emitted
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
//@ run-pass
|
//@ run-pass
|
||||||
|
|
||||||
#![feature(fn_delegation)]
|
#![feature(fn_delegation)]
|
||||||
//~^ WARN the feature `fn_delegation` is incomplete
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
mod to_reuse {
|
mod to_reuse {
|
||||||
use crate::S;
|
use crate::S;
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
warning: the feature `fn_delegation` is incomplete and may not be safe to use and/or cause compiler crashes
|
|
||||||
--> $DIR/explicit-paths-signature-pass.rs:3:12
|
|
||||||
|
|
|
||||||
LL | #![feature(fn_delegation)]
|
|
||||||
| ^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
|
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
|
||||||
|
|
||||||
warning: 1 warning emitted
|
|
||||||
|
|
@ -1,25 +1,84 @@
|
|||||||
#![feature(fn_delegation)]
|
#![feature(fn_delegation)]
|
||||||
//~^ WARN the feature `fn_delegation` is incomplete
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
trait Trait {
|
trait Trait {
|
||||||
fn bar(&self) -> i32 { 42 }
|
fn foo1(&self, x: i32) -> i32 { x }
|
||||||
|
fn foo2(x: i32) -> i32 { x }
|
||||||
}
|
}
|
||||||
|
|
||||||
struct F;
|
struct F;
|
||||||
impl Trait for F {}
|
impl Trait for F {}
|
||||||
|
|
||||||
struct S(F);
|
struct S(F);
|
||||||
|
|
||||||
impl Trait for S {
|
pub mod to_reuse {
|
||||||
reuse <F as Trait>::bar;
|
pub fn foo3() {}
|
||||||
//~^ ERROR mismatched types
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct S2(F);
|
impl F {
|
||||||
|
fn foo4(&self) {}
|
||||||
|
}
|
||||||
|
|
||||||
impl Trait for S2 {
|
mod fn_to_other {
|
||||||
reuse <S2 as Trait>::bar { &self.0 }
|
use super::*;
|
||||||
|
|
||||||
|
reuse Trait::foo1;
|
||||||
|
//~^ ERROR delegation to a trait method from a free function is not supported yet
|
||||||
|
reuse <S as Trait>::foo2;
|
||||||
|
//~^ ERROR delegation to a trait method from a free function is not supported yet
|
||||||
|
reuse to_reuse::foo3;
|
||||||
|
reuse S::foo4;
|
||||||
|
//~^ ERROR cannot find function `foo4` in `S`
|
||||||
|
}
|
||||||
|
|
||||||
|
mod inherent_impl_assoc_fn_to_other {
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
impl S {
|
||||||
|
reuse Trait::foo1 { &self.0 }
|
||||||
|
reuse <S as Trait>::foo2;
|
||||||
|
reuse to_reuse::foo3;
|
||||||
|
reuse F::foo4 { &self.0 }
|
||||||
|
//~^ ERROR cannot find function `foo4` in `F`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mod trait_impl_assoc_fn_to_other {
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
impl Trait for S {
|
||||||
|
reuse Trait::foo1 { &self.0 }
|
||||||
|
reuse <F as Trait>::foo2;
|
||||||
|
reuse to_reuse::foo3;
|
||||||
|
//~^ ERROR method `foo3` is not a member of trait `Trait`
|
||||||
|
reuse F::foo4 { &self.0 }
|
||||||
|
//~^ ERROR method `foo4` is not a member of trait `Trait`
|
||||||
|
//~| ERROR cannot find function `foo4` in `F`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mod trait_assoc_fn_to_other {
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
trait Trait2 : Trait {
|
||||||
|
reuse <F as Trait>::foo1 { self }
|
||||||
//~^ ERROR mismatched types
|
//~^ ERROR mismatched types
|
||||||
|
reuse <F as Trait>::foo2;
|
||||||
|
reuse to_reuse::foo3;
|
||||||
|
reuse F::foo4 { &F }
|
||||||
|
//~^ ERROR cannot find function `foo4` in `F`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mod type_mismatch {
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
struct S2;
|
||||||
|
impl Trait for S {
|
||||||
|
//~^ ERROR conflicting implementations of trait `Trait` for type `S`
|
||||||
|
reuse <S2 as Trait>::foo1;
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
//~| ERROR the trait bound `S2: Trait` is not satisfied
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -1,38 +1,129 @@
|
|||||||
warning: the feature `fn_delegation` is incomplete and may not be safe to use and/or cause compiler crashes
|
error[E0407]: method `foo3` is not a member of trait `Trait`
|
||||||
--> $DIR/explicit-paths.rs:1:12
|
--> $DIR/explicit-paths.rs:51:9
|
||||||
|
|
|
|
||||||
LL | #![feature(fn_delegation)]
|
LL | reuse to_reuse::foo3;
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^----^
|
||||||
|
| | |
|
||||||
|
| | help: there is an associated function with a similar name: `foo1`
|
||||||
|
| not a member of trait `Trait`
|
||||||
|
|
||||||
|
error[E0407]: method `foo4` is not a member of trait `Trait`
|
||||||
|
--> $DIR/explicit-paths.rs:53:9
|
||||||
|
|
|
|
||||||
= note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
|
LL | reuse F::foo4 { &self.0 }
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
| ^^^^^^^^^----^^^^^^^^^^^^
|
||||||
|
| | |
|
||||||
|
| | help: there is an associated function with a similar name: `foo1`
|
||||||
|
| not a member of trait `Trait`
|
||||||
|
|
||||||
|
error[E0425]: cannot find function `foo4` in `S`
|
||||||
|
--> $DIR/explicit-paths.rs:29:14
|
||||||
|
|
|
||||||
|
LL | reuse S::foo4;
|
||||||
|
| ^^^^ not found in `S`
|
||||||
|
|
||||||
|
error[E0425]: cannot find function `foo4` in `F`
|
||||||
|
--> $DIR/explicit-paths.rs:40:18
|
||||||
|
|
|
||||||
|
LL | reuse F::foo4 { &self.0 }
|
||||||
|
| ^^^^ not found in `F`
|
||||||
|
|
|
||||||
|
note: function `fn_to_other::foo4` exists but is inaccessible
|
||||||
|
--> $DIR/explicit-paths.rs:29:5
|
||||||
|
|
|
||||||
|
LL | reuse S::foo4;
|
||||||
|
| ^^^^^^^^^^^^^^ not accessible
|
||||||
|
|
||||||
|
error[E0425]: cannot find function `foo4` in `F`
|
||||||
|
--> $DIR/explicit-paths.rs:53:18
|
||||||
|
|
|
||||||
|
LL | reuse F::foo4 { &self.0 }
|
||||||
|
| ^^^^ not found in `F`
|
||||||
|
|
|
||||||
|
note: function `fn_to_other::foo4` exists but is inaccessible
|
||||||
|
--> $DIR/explicit-paths.rs:29:5
|
||||||
|
|
|
||||||
|
LL | reuse S::foo4;
|
||||||
|
| ^^^^^^^^^^^^^^ not accessible
|
||||||
|
|
||||||
|
error[E0425]: cannot find function `foo4` in `F`
|
||||||
|
--> $DIR/explicit-paths.rs:67:18
|
||||||
|
|
|
||||||
|
LL | reuse F::foo4 { &F }
|
||||||
|
| ^^^^ not found in `F`
|
||||||
|
|
|
||||||
|
note: function `fn_to_other::foo4` exists but is inaccessible
|
||||||
|
--> $DIR/explicit-paths.rs:29:5
|
||||||
|
|
|
||||||
|
LL | reuse S::foo4;
|
||||||
|
| ^^^^^^^^^^^^^^ not accessible
|
||||||
|
|
||||||
|
error[E0119]: conflicting implementations of trait `Trait` for type `S`
|
||||||
|
--> $DIR/explicit-paths.rs:76:5
|
||||||
|
|
|
||||||
|
LL | impl Trait for S {
|
||||||
|
| ---------------- first implementation here
|
||||||
|
...
|
||||||
|
LL | impl Trait for S {
|
||||||
|
| ^^^^^^^^^^^^^^^^ conflicting implementation for `S`
|
||||||
|
|
||||||
|
error: delegation to a trait method from a free function is not supported yet
|
||||||
|
--> $DIR/explicit-paths.rs:24:18
|
||||||
|
|
|
||||||
|
LL | fn foo1(&self, x: i32) -> i32 { x }
|
||||||
|
| ----------------------------- callee defined here
|
||||||
|
...
|
||||||
|
LL | reuse Trait::foo1;
|
||||||
|
| ^^^^
|
||||||
|
|
||||||
|
error: delegation to a trait method from a free function is not supported yet
|
||||||
|
--> $DIR/explicit-paths.rs:26:25
|
||||||
|
|
|
||||||
|
LL | fn foo2(x: i32) -> i32 { x }
|
||||||
|
| ---------------------- callee defined here
|
||||||
|
...
|
||||||
|
LL | reuse <S as Trait>::foo2;
|
||||||
|
| ^^^^
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/explicit-paths.rs:14:25
|
--> $DIR/explicit-paths.rs:63:36
|
||||||
|
|
|
|
||||||
LL | reuse <F as Trait>::bar;
|
LL | trait Trait2 : Trait {
|
||||||
| --------------^^^
|
| -------------------- found this type parameter
|
||||||
| | |
|
LL | reuse <F as Trait>::foo1 { self }
|
||||||
| | expected `&F`, found `&S`
|
| ^^^^ expected `&F`, found `&Self`
|
||||||
| arguments to this function are incorrect
|
|
||||||
|
|
|
|
||||||
= note: expected reference `&F`
|
= note: expected reference `&F`
|
||||||
|
found reference `&Self`
|
||||||
|
|
||||||
|
error[E0277]: the trait bound `S2: Trait` is not satisfied
|
||||||
|
--> $DIR/explicit-paths.rs:78:16
|
||||||
|
|
|
||||||
|
LL | reuse <S2 as Trait>::foo1;
|
||||||
|
| ^^ the trait `Trait` is not implemented for `S2`
|
||||||
|
|
|
||||||
|
= help: the following other types implement trait `Trait`:
|
||||||
|
F
|
||||||
|
S
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/explicit-paths.rs:78:30
|
||||||
|
|
|
||||||
|
LL | reuse <S2 as Trait>::foo1;
|
||||||
|
| ---------------^^^^
|
||||||
|
| | |
|
||||||
|
| | expected `&S2`, found `&S`
|
||||||
|
| arguments to this function are incorrect
|
||||||
|
|
|
||||||
|
= note: expected reference `&S2`
|
||||||
found reference `&S`
|
found reference `&S`
|
||||||
note: method defined here
|
note: method defined here
|
||||||
--> $DIR/explicit-paths.rs:5:8
|
--> $DIR/explicit-paths.rs:5:8
|
||||||
|
|
|
|
||||||
LL | fn bar(&self) -> i32 { 42 }
|
LL | fn foo1(&self, x: i32) -> i32 { x }
|
||||||
| ^^^ -----
|
| ^^^^ -----
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error: aborting due to 12 previous errors
|
||||||
--> $DIR/explicit-paths.rs:21:32
|
|
||||||
|
|
|
||||||
LL | reuse <S2 as Trait>::bar { &self.0 }
|
|
||||||
| ^^^^^^^ expected `&S2`, found `&F`
|
|
||||||
|
|
|
||||||
= note: expected reference `&S2`
|
|
||||||
found reference `&F`
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors; 1 warning emitted
|
Some errors have detailed explanations: E0119, E0277, E0308, E0407, E0425.
|
||||||
|
For more information about an error, try `rustc --explain E0119`.
|
||||||
For more information about this error, try `rustc --explain E0308`.
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#![feature(c_variadic)]
|
#![feature(c_variadic)]
|
||||||
#![feature(fn_delegation)]
|
#![feature(fn_delegation)]
|
||||||
//~^ WARN the feature `fn_delegation` is incomplete
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
mod generics {
|
mod generics {
|
||||||
trait GenericTrait<T> {
|
trait GenericTrait<T> {
|
||||||
|
@ -1,12 +1,3 @@
|
|||||||
warning: the feature `fn_delegation` is incomplete and may not be safe to use and/or cause compiler crashes
|
|
||||||
--> $DIR/not-supported.rs:2:12
|
|
||||||
|
|
|
||||||
LL | #![feature(fn_delegation)]
|
|
||||||
| ^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
|
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
|
||||||
|
|
||||||
error: delegation with early bound generics is not supported yet
|
error: delegation with early bound generics is not supported yet
|
||||||
--> $DIR/not-supported.rs:16:29
|
--> $DIR/not-supported.rs:16:29
|
||||||
|
|
|
|
||||||
@ -178,7 +169,7 @@ LL | pub reuse to_reuse2::foo;
|
|||||||
LL | reuse to_reuse1::foo;
|
LL | reuse to_reuse1::foo;
|
||||||
| ^^^
|
| ^^^
|
||||||
|
|
||||||
error: aborting due to 19 previous errors; 1 warning emitted
|
error: aborting due to 19 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0049, E0195.
|
Some errors have detailed explanations: E0049, E0195.
|
||||||
For more information about an error, try `rustc --explain E0049`.
|
For more information about an error, try `rustc --explain E0049`.
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#![feature(decl_macro)]
|
#![feature(decl_macro)]
|
||||||
#![feature(fn_delegation)]
|
#![feature(fn_delegation)]
|
||||||
//~^ WARN the feature `fn_delegation` is incomplete
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
macro_rules! reuse { {} => {} }
|
macro_rules! reuse { {} => {} }
|
||||||
|
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
warning: the feature `fn_delegation` is incomplete and may not be safe to use and/or cause compiler crashes
|
|
||||||
--> $DIR/parse.rs:4:12
|
|
||||||
|
|
|
||||||
LL | #![feature(fn_delegation)]
|
|
||||||
| ^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
|
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
|
||||||
|
|
||||||
warning: 1 warning emitted
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
//@ run-pass
|
//@ run-pass
|
||||||
|
|
||||||
#![feature(fn_delegation)]
|
#![feature(fn_delegation)]
|
||||||
//~^ WARN the feature `fn_delegation` is incomplete
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
mod to_reuse {
|
mod to_reuse {
|
||||||
pub fn foo(x: i32) -> i32 { x }
|
pub fn foo(x: i32) -> i32 { x }
|
||||||
|
@ -1,12 +1,3 @@
|
|||||||
warning: the feature `fn_delegation` is incomplete and may not be safe to use and/or cause compiler crashes
|
|
||||||
--> $DIR/target-expr-pass.rs:3:12
|
|
||||||
|
|
|
||||||
LL | #![feature(fn_delegation)]
|
|
||||||
| ^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
|
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
|
||||||
|
|
||||||
warning: trait `Trait` is never used
|
warning: trait `Trait` is never used
|
||||||
--> $DIR/target-expr-pass.rs:17:7
|
--> $DIR/target-expr-pass.rs:17:7
|
||||||
|
|
|
|
||||||
@ -27,5 +18,5 @@ warning: struct `S` is never constructed
|
|||||||
LL | struct S(F);
|
LL | struct S(F);
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
warning: 4 warnings emitted
|
warning: 3 warnings emitted
|
||||||
|
|
||||||
|
@ -14,7 +14,8 @@ fn foo(x: i32) -> i32 { x }
|
|||||||
|
|
||||||
fn bar<T: Default>(_: T) {
|
fn bar<T: Default>(_: T) {
|
||||||
reuse Trait::static_method {
|
reuse Trait::static_method {
|
||||||
//~^ ERROR delegation with early bound generics is not supported yet
|
//~^ ERROR delegation to a trait method from a free function is not supported yet
|
||||||
|
//~| ERROR delegation with early bound generics is not supported yet
|
||||||
//~| ERROR mismatched types
|
//~| ERROR mismatched types
|
||||||
let _ = T::Default();
|
let _ = T::Default();
|
||||||
//~^ ERROR can't use generic parameters from outer item
|
//~^ ERROR can't use generic parameters from outer item
|
||||||
@ -24,6 +25,7 @@ fn bar<T: Default>(_: T) {
|
|||||||
fn main() {
|
fn main() {
|
||||||
let y = 0;
|
let y = 0;
|
||||||
reuse <S as Trait>::static_method {
|
reuse <S as Trait>::static_method {
|
||||||
|
//~^ ERROR delegation to a trait method from a free function is not supported yet
|
||||||
let x = y;
|
let x = y;
|
||||||
//~^ ERROR can't capture dynamic environment in a fn item
|
//~^ ERROR can't capture dynamic environment in a fn item
|
||||||
foo(self);
|
foo(self);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
error[E0401]: can't use generic parameters from outer item
|
error[E0401]: can't use generic parameters from outer item
|
||||||
--> $DIR/target-expr.rs:19:17
|
--> $DIR/target-expr.rs:20:17
|
||||||
|
|
|
|
||||||
LL | fn bar<T: Default>(_: T) {
|
LL | fn bar<T: Default>(_: T) {
|
||||||
| - type parameter from outer item
|
| - type parameter from outer item
|
||||||
@ -10,7 +10,7 @@ LL | let _ = T::Default();
|
|||||||
| ^^^^^^^^^^ use of generic parameter from outer item
|
| ^^^^^^^^^^ use of generic parameter from outer item
|
||||||
|
|
||||||
error[E0434]: can't capture dynamic environment in a fn item
|
error[E0434]: can't capture dynamic environment in a fn item
|
||||||
--> $DIR/target-expr.rs:27:17
|
--> $DIR/target-expr.rs:29:17
|
||||||
|
|
|
|
||||||
LL | let x = y;
|
LL | let x = y;
|
||||||
| ^
|
| ^
|
||||||
@ -18,7 +18,7 @@ LL | let x = y;
|
|||||||
= help: use the `|| { ... }` closure form instead
|
= help: use the `|| { ... }` closure form instead
|
||||||
|
|
||||||
error[E0424]: expected value, found module `self`
|
error[E0424]: expected value, found module `self`
|
||||||
--> $DIR/target-expr.rs:34:5
|
--> $DIR/target-expr.rs:36:5
|
||||||
|
|
|
|
||||||
LL | fn main() {
|
LL | fn main() {
|
||||||
| ---- this function can't have a `self` parameter
|
| ---- this function can't have a `self` parameter
|
||||||
@ -27,13 +27,13 @@ LL | self.0;
|
|||||||
| ^^^^ `self` value is a keyword only available in methods with a `self` parameter
|
| ^^^^ `self` value is a keyword only available in methods with a `self` parameter
|
||||||
|
|
||||||
error[E0425]: cannot find value `x` in this scope
|
error[E0425]: cannot find value `x` in this scope
|
||||||
--> $DIR/target-expr.rs:36:13
|
--> $DIR/target-expr.rs:38:13
|
||||||
|
|
|
|
||||||
LL | let z = x;
|
LL | let z = x;
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
help: the binding `x` is available in a different scope in the same function
|
help: the binding `x` is available in a different scope in the same function
|
||||||
--> $DIR/target-expr.rs:27:13
|
--> $DIR/target-expr.rs:29:13
|
||||||
|
|
|
|
||||||
LL | let x = y;
|
LL | let x = y;
|
||||||
| ^
|
| ^
|
||||||
@ -47,6 +47,24 @@ LL | fn static_method(x: i32) -> i32 { x }
|
|||||||
LL | reuse Trait::static_method {
|
LL | reuse Trait::static_method {
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: delegation to a trait method from a free function is not supported yet
|
||||||
|
--> $DIR/target-expr.rs:16:18
|
||||||
|
|
|
||||||
|
LL | fn static_method(x: i32) -> i32 { x }
|
||||||
|
| ------------------------------- callee defined here
|
||||||
|
...
|
||||||
|
LL | reuse Trait::static_method {
|
||||||
|
| ^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: delegation to a trait method from a free function is not supported yet
|
||||||
|
--> $DIR/target-expr.rs:27:25
|
||||||
|
|
|
||||||
|
LL | fn static_method(x: i32) -> i32 { x }
|
||||||
|
| ------------------------------- callee defined here
|
||||||
|
...
|
||||||
|
LL | reuse <S as Trait>::static_method {
|
||||||
|
| ^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/target-expr.rs:16:32
|
--> $DIR/target-expr.rs:16:32
|
||||||
|
|
|
|
||||||
@ -54,12 +72,13 @@ LL | reuse Trait::static_method {
|
|||||||
| ________________________________^
|
| ________________________________^
|
||||||
LL | |
|
LL | |
|
||||||
LL | |
|
LL | |
|
||||||
|
LL | |
|
||||||
LL | | let _ = T::Default();
|
LL | | let _ = T::Default();
|
||||||
LL | |
|
LL | |
|
||||||
LL | | }
|
LL | | }
|
||||||
| |_____^ expected `i32`, found `()`
|
| |_____^ expected `i32`, found `()`
|
||||||
|
|
||||||
error: aborting due to 6 previous errors
|
error: aborting due to 8 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0308, E0401, E0424, E0425, E0434.
|
Some errors have detailed explanations: E0308, E0401, E0424, E0425, E0434.
|
||||||
For more information about an error, try `rustc --explain E0308`.
|
For more information about an error, try `rustc --explain E0308`.
|
||||||
|
Loading…
Reference in New Issue
Block a user