revert: PR144016 - MetaSized does not always hold
This commit is contained in:
parent
235a4c083e
commit
efaeacfc96
23 changed files with 294 additions and 45 deletions
|
|
@ -383,13 +383,6 @@ pub fn sizedness_fast_path<'tcx>(
|
|||
_ => return false,
|
||||
};
|
||||
|
||||
// FIXME(sized_hierarchy): this temporarily reverts the `sized_hierarchy` feature
|
||||
// while a proper fix for `tests/ui/sized-hierarchy/incomplete-inference-issue-143992.rs`
|
||||
// is pending a proper fix
|
||||
if !tcx.features().sized_hierarchy() && matches!(sizedness, SizedTraitKind::MetaSized) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if trait_pred.self_ty().has_trivial_sizedness(tcx, sizedness) {
|
||||
debug!("fast path -- trivial sizedness");
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ extern "C" {
|
|||
}
|
||||
|
||||
const _SIZE: usize = unsafe { size_of_val(&4 as *const i32 as *const Opaque) };
|
||||
//~^ ERROR `extern type` does not have known layout
|
||||
//~^ ERROR: the size for values of type `Opaque` cannot be known
|
||||
const _ALIGN: usize = unsafe { align_of_val(&4 as *const i32 as *const Opaque) };
|
||||
//~^ ERROR `extern type` does not have known layout
|
||||
//~^ ERROR: the size for values of type `Opaque` cannot be known
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,39 @@
|
|||
error[E0080]: `extern type` does not have known layout
|
||||
--> $DIR/const-size_of_val-align_of_val-extern-type.rs:10:31
|
||||
error[E0277]: the size for values of type `Opaque` cannot be known
|
||||
--> $DIR/const-size_of_val-align_of_val-extern-type.rs:10:43
|
||||
|
|
||||
LL | const _SIZE: usize = unsafe { size_of_val(&4 as *const i32 as *const Opaque) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `_SIZE` failed here
|
||||
| ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `MetaSized` is not implemented for `Opaque`
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= note: the trait bound `Opaque: MetaSized` is not satisfied
|
||||
note: required by a bound in `std::intrinsics::size_of_val`
|
||||
--> $SRC_DIR/core/src/intrinsics/mod.rs:LL:COL
|
||||
help: consider borrowing here
|
||||
|
|
||||
LL | const _SIZE: usize = unsafe { size_of_val(&(&4 as *const i32 as *const Opaque)) };
|
||||
| ++ +
|
||||
LL | const _SIZE: usize = unsafe { size_of_val(&mut (&4 as *const i32 as *const Opaque)) };
|
||||
| ++++++ +
|
||||
|
||||
error[E0080]: `extern type` does not have known layout
|
||||
--> $DIR/const-size_of_val-align_of_val-extern-type.rs:12:32
|
||||
error[E0277]: the size for values of type `Opaque` cannot be known
|
||||
--> $DIR/const-size_of_val-align_of_val-extern-type.rs:12:45
|
||||
|
|
||||
LL | const _ALIGN: usize = unsafe { align_of_val(&4 as *const i32 as *const Opaque) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `_ALIGN` failed here
|
||||
| ------------ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `MetaSized` is not implemented for `Opaque`
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= note: the trait bound `Opaque: MetaSized` is not satisfied
|
||||
note: required by a bound in `std::intrinsics::align_of_val`
|
||||
--> $SRC_DIR/core/src/intrinsics/mod.rs:LL:COL
|
||||
help: consider borrowing here
|
||||
|
|
||||
LL | const _ALIGN: usize = unsafe { align_of_val(&(&4 as *const i32 as *const Opaque)) };
|
||||
| ++ +
|
||||
LL | const _ALIGN: usize = unsafe { align_of_val(&mut (&4 as *const i32 as *const Opaque)) };
|
||||
| ++++++ +
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0080`.
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
|
|||
5
tests/ui/extern/extern-types-size_of_val.rs
vendored
5
tests/ui/extern/extern-types-size_of_val.rs
vendored
|
|
@ -1,8 +1,9 @@
|
|||
//@ check-pass
|
||||
#![feature(extern_types)]
|
||||
|
||||
use std::mem::{align_of_val, size_of_val};
|
||||
|
||||
// Check that calls to `size_of_val` and `align_of_val` with extern types are not accepted
|
||||
|
||||
extern "C" {
|
||||
type A;
|
||||
}
|
||||
|
|
@ -11,5 +12,7 @@ fn main() {
|
|||
let x: &A = unsafe { &*(1usize as *const A) };
|
||||
|
||||
size_of_val(x);
|
||||
//~^ ERROR: the size for values of type `A` cannot be known
|
||||
align_of_val(x);
|
||||
//~^ ERROR: the size for values of type `A` cannot be known
|
||||
}
|
||||
|
|
|
|||
39
tests/ui/extern/extern-types-size_of_val.stderr
vendored
Normal file
39
tests/ui/extern/extern-types-size_of_val.stderr
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
error[E0277]: the size for values of type `A` cannot be known
|
||||
--> $DIR/extern-types-size_of_val.rs:14:17
|
||||
|
|
||||
LL | size_of_val(x);
|
||||
| ----------- ^ the trait `MetaSized` is not implemented for `A`
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= note: the trait bound `A: MetaSized` is not satisfied
|
||||
note: required by a bound in `std::mem::size_of_val`
|
||||
--> $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
help: consider borrowing here
|
||||
|
|
||||
LL | size_of_val(&x);
|
||||
| +
|
||||
LL | size_of_val(&mut x);
|
||||
| ++++
|
||||
|
||||
error[E0277]: the size for values of type `A` cannot be known
|
||||
--> $DIR/extern-types-size_of_val.rs:16:18
|
||||
|
|
||||
LL | align_of_val(x);
|
||||
| ------------ ^ the trait `MetaSized` is not implemented for `A`
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= note: the trait bound `A: MetaSized` is not satisfied
|
||||
note: required by a bound in `std::mem::align_of_val`
|
||||
--> $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
help: consider borrowing here
|
||||
|
|
||||
LL | align_of_val(&x);
|
||||
| +
|
||||
LL | align_of_val(&mut x);
|
||||
| ++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
2
tests/ui/extern/extern-types-unsized.rs
vendored
2
tests/ui/extern/extern-types-unsized.rs
vendored
|
|
@ -27,7 +27,9 @@ fn main() {
|
|||
|
||||
assert_sized::<Bar<A>>();
|
||||
//~^ ERROR the size for values of type
|
||||
//~| ERROR the size for values of type `A` cannot be known
|
||||
|
||||
assert_sized::<Bar<Bar<A>>>();
|
||||
//~^ ERROR the size for values of type
|
||||
//~| ERROR the size for values of type `A` cannot be known
|
||||
}
|
||||
|
|
|
|||
30
tests/ui/extern/extern-types-unsized.stderr
vendored
30
tests/ui/extern/extern-types-unsized.stderr
vendored
|
|
@ -59,8 +59,21 @@ help: consider relaxing the implicit `Sized` restriction
|
|||
LL | fn assert_sized<T: ?Sized>() {}
|
||||
| ++++++++
|
||||
|
||||
error[E0277]: the size for values of type `A` cannot be known
|
||||
--> $DIR/extern-types-unsized.rs:28:20
|
||||
|
|
||||
LL | assert_sized::<Bar<A>>();
|
||||
| ^^^^^^ doesn't have a known size
|
||||
|
|
||||
= help: the trait `MetaSized` is not implemented for `A`
|
||||
note: required by a bound in `Bar`
|
||||
--> $DIR/extern-types-unsized.rs:14:12
|
||||
|
|
||||
LL | struct Bar<T: ?Sized> {
|
||||
| ^ required by this bound in `Bar`
|
||||
|
||||
error[E0277]: the size for values of type `A` cannot be known at compilation time
|
||||
--> $DIR/extern-types-unsized.rs:31:20
|
||||
--> $DIR/extern-types-unsized.rs:32:20
|
||||
|
|
||||
LL | assert_sized::<Bar<Bar<A>>>();
|
||||
| ^^^^^^^^^^^ doesn't have a size known at compile-time
|
||||
|
|
@ -81,6 +94,19 @@ help: consider relaxing the implicit `Sized` restriction
|
|||
LL | fn assert_sized<T: ?Sized>() {}
|
||||
| ++++++++
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error[E0277]: the size for values of type `A` cannot be known
|
||||
--> $DIR/extern-types-unsized.rs:32:20
|
||||
|
|
||||
LL | assert_sized::<Bar<Bar<A>>>();
|
||||
| ^^^^^^^^^^^ doesn't have a known size
|
||||
|
|
||||
= help: the trait `MetaSized` is not implemented for `A`
|
||||
note: required by a bound in `Bar`
|
||||
--> $DIR/extern-types-unsized.rs:14:12
|
||||
|
|
||||
LL | struct Bar<T: ?Sized> {
|
||||
| ^ required by this bound in `Bar`
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
|
|||
4
tests/ui/extern/unsized-extern-derefmove.rs
vendored
4
tests/ui/extern/unsized-extern-derefmove.rs
vendored
|
|
@ -7,10 +7,14 @@ extern "C" {
|
|||
}
|
||||
|
||||
unsafe fn make_device() -> Box<Device> {
|
||||
//~^ ERROR the size for values of type `Device` cannot be known
|
||||
Box::from_raw(0 as *mut _)
|
||||
//~^ ERROR the size for values of type `Device` cannot be known
|
||||
//~| ERROR the size for values of type `Device` cannot be known
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let d: Device = unsafe { *make_device() };
|
||||
//~^ ERROR the size for values of type `Device` cannot be known
|
||||
//~| ERROR the size for values of type `Device` cannot be known
|
||||
}
|
||||
|
|
|
|||
52
tests/ui/extern/unsized-extern-derefmove.stderr
vendored
52
tests/ui/extern/unsized-extern-derefmove.stderr
vendored
|
|
@ -1,5 +1,43 @@
|
|||
error[E0277]: the size for values of type `Device` cannot be known
|
||||
--> $DIR/unsized-extern-derefmove.rs:9:28
|
||||
|
|
||||
LL | unsafe fn make_device() -> Box<Device> {
|
||||
| ^^^^^^^^^^^ doesn't have a known size
|
||||
|
|
||||
= help: the trait `MetaSized` is not implemented for `Device`
|
||||
note: required by a bound in `Box`
|
||||
--> $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
|
||||
error[E0277]: the size for values of type `Device` cannot be known
|
||||
--> $DIR/unsized-extern-derefmove.rs:11:19
|
||||
|
|
||||
LL | Box::from_raw(0 as *mut _)
|
||||
| ------------- ^^^^^^^^^^^ the trait `MetaSized` is not implemented for `Device`
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= note: the trait bound `Device: MetaSized` is not satisfied
|
||||
note: required by a bound in `Box::<T>::from_raw`
|
||||
--> $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
help: consider borrowing here
|
||||
|
|
||||
LL | Box::from_raw(&(0 as *mut _))
|
||||
| ++ +
|
||||
LL | Box::from_raw(&mut (0 as *mut _))
|
||||
| ++++++ +
|
||||
|
||||
error[E0277]: the size for values of type `Device` cannot be known
|
||||
--> $DIR/unsized-extern-derefmove.rs:11:5
|
||||
|
|
||||
LL | Box::from_raw(0 as *mut _)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a known size
|
||||
|
|
||||
= help: the trait `MetaSized` is not implemented for `Device`
|
||||
note: required by a bound in `Box`
|
||||
--> $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
|
||||
error[E0277]: the size for values of type `Device` cannot be known at compilation time
|
||||
--> $DIR/unsized-extern-derefmove.rs:14:9
|
||||
--> $DIR/unsized-extern-derefmove.rs:17:9
|
||||
|
|
||||
LL | let d: Device = unsafe { *make_device() };
|
||||
| ^ doesn't have a size known at compile-time
|
||||
|
|
@ -11,6 +49,16 @@ help: consider borrowing here
|
|||
LL | let d: &Device = unsafe { *make_device() };
|
||||
| +
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the size for values of type `Device` cannot be known
|
||||
--> $DIR/unsized-extern-derefmove.rs:17:31
|
||||
|
|
||||
LL | let d: Device = unsafe { *make_device() };
|
||||
| ^^^^^^^^^^^^^ doesn't have a known size
|
||||
|
|
||||
= help: the trait `MetaSized` is not implemented for `Device`
|
||||
note: required by a bound in `Box`
|
||||
--> $SRC_DIR/alloc/src/boxed.rs:LL:COL
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
|
|||
|
|
@ -17,3 +17,4 @@ impl<C: ?Sized> A for u8 { //~ ERROR: the type parameter `C` is not constrained
|
|||
#[rustc_layout(debug)]
|
||||
struct S([u8; <u8 as A>::B]);
|
||||
//~^ ERROR: the type has an unknown layout
|
||||
//~| ERROR: type annotations needed
|
||||
|
|
|
|||
|
|
@ -4,12 +4,19 @@ error[E0207]: the type parameter `C` is not constrained by the impl trait, self
|
|||
LL | impl<C: ?Sized> A for u8 {
|
||||
| ^ unconstrained type parameter
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/unconstrained-param-ice-137308.rs:18:16
|
||||
|
|
||||
LL | struct S([u8; <u8 as A>::B]);
|
||||
| ^^ cannot infer type for type parameter `C`
|
||||
|
||||
error: the type has an unknown layout
|
||||
--> $DIR/unconstrained-param-ice-137308.rs:18:1
|
||||
|
|
||||
LL | struct S([u8; <u8 as A>::B]);
|
||||
| ^^^^^^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0207`.
|
||||
Some errors have detailed explanations: E0207, E0282.
|
||||
For more information about an error, try `rustc --explain E0207`.
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ trait A {
|
|||
type X: ?Sized;
|
||||
}
|
||||
|
||||
fn foo<'a, T: 'static>(s: Box<<&'a T as A>::X>)
|
||||
fn foo<'a, T: 'static>(s: Box<<&'a T as A>::X>) //~ ERROR
|
||||
where
|
||||
for<'b> &'b T: A,
|
||||
<&'static T as A>::X: Sized
|
||||
|
|
|
|||
|
|
@ -1,3 +1,18 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-50716.rs:8:27
|
||||
|
|
||||
LL | fn foo<'a, T: 'static>(s: Box<<&'a T as A>::X>)
|
||||
| ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
|
||||
|
|
||||
= note: expected trait `<<&'a T as A>::X as MetaSized>`
|
||||
found trait `<<&'static T as A>::X as MetaSized>`
|
||||
note: the lifetime `'a` as defined here...
|
||||
--> $DIR/issue-50716.rs:8:8
|
||||
|
|
||||
LL | fn foo<'a, T: 'static>(s: Box<<&'a T as A>::X>)
|
||||
| ^^
|
||||
= note: ...does not necessarily outlive the static lifetime
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/issue-50716.rs:13:14
|
||||
|
|
||||
|
|
@ -7,5 +22,6 @@ LL | fn foo<'a, T: 'static>(s: Box<<&'a T as A>::X>)
|
|||
LL | let _x = *s;
|
||||
| ^^ proving this value is `Sized` requires that `'a` must outlive `'static`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/incomplete-inference-issue-143992.rs:30:28
|
||||
--> $DIR/incomplete-inference-issue-143992.rs:27:28
|
||||
|
|
||||
LL | let _x = T::Assoc::new(());
|
||||
| ------------- ^^ expected `[u32; 1]`, found `()`
|
||||
|
|
@ -7,7 +7,7 @@ LL | let _x = T::Assoc::new(());
|
|||
| arguments to this function are incorrect
|
||||
|
|
||||
note: associated function defined here
|
||||
--> $DIR/incomplete-inference-issue-143992.rs:21:8
|
||||
--> $DIR/incomplete-inference-issue-143992.rs:18:8
|
||||
|
|
||||
LL | fn new(r: R) -> R {
|
||||
| ^^^ ----
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/incomplete-inference-issue-143992.rs:30:28
|
||||
--> $DIR/incomplete-inference-issue-143992.rs:27:28
|
||||
|
|
||||
LL | let _x = T::Assoc::new(());
|
||||
| ------------- ^^ expected `[u32; 1]`, found `()`
|
||||
|
|
@ -7,7 +7,7 @@ LL | let _x = T::Assoc::new(());
|
|||
| arguments to this function are incorrect
|
||||
|
|
||||
note: associated function defined here
|
||||
--> $DIR/incomplete-inference-issue-143992.rs:21:8
|
||||
--> $DIR/incomplete-inference-issue-143992.rs:18:8
|
||||
|
|
||||
LL | fn new(r: R) -> R {
|
||||
| ^^^ ----
|
||||
|
|
@ -1,12 +1,9 @@
|
|||
//@ compile-flags: --crate-type=lib
|
||||
//@ revisions: current next current_sized_hierarchy next_sized_hierarchy
|
||||
//@ revisions: current next
|
||||
//@ ignore-compare-mode-next-solver (explicit revisions)
|
||||
//@[current] check-pass
|
||||
//@[next] check-pass
|
||||
//@[current] check-fail
|
||||
//@[next] check-fail
|
||||
//@[next] compile-flags: -Znext-solver
|
||||
//@[next_sized_hierarchy] compile-flags: -Znext-solver
|
||||
|
||||
#![cfg_attr(any(current_sized_hierarchy, next_sized_hierarchy), feature(sized_hierarchy))]
|
||||
|
||||
// Test that we avoid incomplete inference when normalizing. Without this,
|
||||
// `Trait`'s implicit `MetaSized` supertrait requires proving `T::Assoc<_>: MetaSized`
|
||||
|
|
@ -28,6 +25,5 @@ where
|
|||
T::Assoc<[u32; 1]>: Clone,
|
||||
{
|
||||
let _x = T::Assoc::new(());
|
||||
//[next_sized_hierarchy]~^ ERROR mismatched types
|
||||
//[current_sized_hierarchy]~^^ ERROR mismatched types
|
||||
//~^ ERROR: mismatched types
|
||||
}
|
||||
|
|
|
|||
45
tests/ui/sized-hierarchy/overflow.current.stderr
Normal file
45
tests/ui/sized-hierarchy/overflow.current.stderr
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
error[E0275]: overflow evaluating the requirement `Element: MetaSized`
|
||||
--> $DIR/overflow.rs:17:16
|
||||
|
|
||||
LL | struct Element(<Box<Box<Element>> as ParseTokens>::Output);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: required for `Box<Element>` to implement `ParseTokens`
|
||||
--> $DIR/overflow.rs:13:31
|
||||
|
|
||||
LL | impl<T: ParseTokens + ?Sized> ParseTokens for Box<T> {
|
||||
| - ^^^^^^^^^^^ ^^^^^^
|
||||
| |
|
||||
| unsatisfied trait bound introduced here
|
||||
= note: 1 redundant requirement hidden
|
||||
= note: required for `Box<Box<Element>>` to implement `ParseTokens`
|
||||
|
||||
error[E0275]: overflow evaluating the requirement `Box<Element>: ParseTokens`
|
||||
--> $DIR/overflow.rs:19:22
|
||||
|
|
||||
LL | impl ParseTokens for Element {
|
||||
| ^^^^^^^
|
||||
|
|
||||
note: required for `Box<Box<Element>>` to implement `ParseTokens`
|
||||
--> $DIR/overflow.rs:13:31
|
||||
|
|
||||
LL | impl<T: ParseTokens + ?Sized> ParseTokens for Box<T> {
|
||||
| ----------- ^^^^^^^^^^^ ^^^^^^
|
||||
| |
|
||||
| unsatisfied trait bound introduced here
|
||||
note: required because it appears within the type `Element`
|
||||
--> $DIR/overflow.rs:17:8
|
||||
|
|
||||
LL | struct Element(<Box<Box<Element>> as ParseTokens>::Output);
|
||||
| ^^^^^^^
|
||||
note: required by a bound in `ParseTokens`
|
||||
--> $DIR/overflow.rs:10:1
|
||||
|
|
||||
LL | / trait ParseTokens {
|
||||
LL | | type Output;
|
||||
LL | | }
|
||||
| |_^ required by this bound in `ParseTokens`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0275`.
|
||||
|
|
@ -1,13 +1,10 @@
|
|||
//@ compile-flags: --crate-type=lib
|
||||
//@ revisions: current next
|
||||
//@ ignore-compare-mode-next-solver (explicit revisions)
|
||||
//@[current] check-pass
|
||||
//@[current] check-fail
|
||||
//@[next] check-pass
|
||||
//@[next] compile-flags: -Znext-solver
|
||||
|
||||
// FIXME(sized_hierarchy): this is expected to fail in the old solver when there
|
||||
// isn't a temporary revert of the `sized_hierarchy` feature
|
||||
|
||||
use std::marker::PhantomData;
|
||||
|
||||
trait ParseTokens {
|
||||
|
|
@ -18,6 +15,8 @@ impl<T: ParseTokens + ?Sized> ParseTokens for Box<T> {
|
|||
}
|
||||
|
||||
struct Element(<Box<Box<Element>> as ParseTokens>::Output);
|
||||
//[current]~^ ERROR: overflow
|
||||
impl ParseTokens for Element {
|
||||
//[current]~^ ERROR: overflow
|
||||
type Output = ();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,13 @@ LL | impl<T: Bound, U> Trait<U> for T {
|
|||
| ----- ^^^^^^^^ ^
|
||||
| |
|
||||
| unsatisfied trait bound introduced here
|
||||
note: required by a bound in `Bound`
|
||||
--> $DIR/normalizes-to-is-not-productive.rs:8:1
|
||||
|
|
||||
LL | / trait Bound {
|
||||
LL | | fn method();
|
||||
LL | | }
|
||||
| |_^ required by this bound in `Bound`
|
||||
|
||||
error[E0277]: the trait bound `Foo: Bound` is not satisfied
|
||||
--> $DIR/normalizes-to-is-not-productive.rs:47:19
|
||||
|
|
|
|||
|
|
@ -19,6 +19,23 @@ error[E0275]: overflow evaluating the requirement `<() as A<T>>::Assoc: A<T>`
|
|||
LL | Self::Assoc: A<T>,
|
||||
| ^^^^
|
||||
|
||||
error[E0275]: overflow evaluating the requirement `<() as A<T>>::Assoc: MetaSized`
|
||||
--> $DIR/normalize-param-env-2.rs:24:22
|
||||
|
|
||||
LL | Self::Assoc: A<T>,
|
||||
| ^^^^
|
||||
|
|
||||
note: required by a bound in `A`
|
||||
--> $DIR/normalize-param-env-2.rs:9:1
|
||||
|
|
||||
LL | / trait A<T> {
|
||||
LL | | type Assoc;
|
||||
LL | |
|
||||
LL | | fn f()
|
||||
... |
|
||||
LL | | }
|
||||
| |_^ required by this bound in `A`
|
||||
|
||||
error[E0275]: overflow evaluating the requirement `<() as A<T>>::Assoc well-formed`
|
||||
--> $DIR/normalize-param-env-2.rs:24:22
|
||||
|
|
||||
|
|
@ -46,6 +63,6 @@ LL | where
|
|||
LL | Self::Assoc: A<T>,
|
||||
| ^^^^ required by this bound in `A::f`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0275`.
|
||||
|
|
|
|||
|
|
@ -4,6 +4,20 @@ error[E0275]: overflow evaluating the requirement `<T as Trait>::Assoc: Trait`
|
|||
LL | <T as Trait>::Assoc: Trait,
|
||||
| ^^^^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0275]: overflow evaluating the requirement `<T as Trait>::Assoc: MetaSized`
|
||||
--> $DIR/normalize-param-env-4.rs:19:26
|
||||
|
|
||||
LL | <T as Trait>::Assoc: Trait,
|
||||
| ^^^^^
|
||||
|
|
||||
note: required by a bound in `Trait`
|
||||
--> $DIR/normalize-param-env-4.rs:7:1
|
||||
|
|
||||
LL | / trait Trait {
|
||||
LL | | type Assoc;
|
||||
LL | | }
|
||||
| |_^ required by this bound in `Trait`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0275`.
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ use foo::*;
|
|||
|
||||
fn test() -> impl Sized {
|
||||
<() as Callable>::call()
|
||||
//~^ ERROR type annotations needed
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,13 @@ error[E0207]: the type parameter `V` is not constrained by the impl trait, self
|
|||
LL | impl<V: ?Sized> Callable for () {
|
||||
| ^ unconstrained type parameter
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/resolve-impl-before-constrain-check.rs:17:6
|
||||
|
|
||||
LL | <() as Callable>::call()
|
||||
| ^^ cannot infer type for type parameter `V`
|
||||
|
||||
For more information about this error, try `rustc --explain E0207`.
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0207, E0282.
|
||||
For more information about an error, try `rustc --explain E0207`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue