Remove impl_trait_in_bindings feature flag

This commit is contained in:
Santiago Pastorino 2021-07-16 10:06:26 -03:00
parent 75585b408f
commit e8c04b4386
No known key found for this signature in database
GPG Key ID: 8131A24E0C79EFAF
63 changed files with 388 additions and 741 deletions

View File

@ -1460,7 +1460,7 @@ fn lower_ty_direct(&mut self, t: &Ty, mut itctx: ImplTraitContext<'_, 'hir>) ->
}), }),
)) ))
} }
ImplTraitContext::Disallowed(pos) => { ImplTraitContext::Disallowed(_) => {
let mut err = struct_span_err!( let mut err = struct_span_err!(
self.sess, self.sess,
t.span, t.span,
@ -1468,12 +1468,6 @@ fn lower_ty_direct(&mut self, t: &Ty, mut itctx: ImplTraitContext<'_, 'hir>) ->
"`impl Trait` not allowed outside of {}", "`impl Trait` not allowed outside of {}",
"function and inherent method return types", "function and inherent method return types",
); );
if pos == ImplTraitPosition::Binding && self.sess.is_nightly_build() {
err.help(
"add `#![feature(impl_trait_in_bindings)]` to the crate \
attributes to enable",
);
}
err.emit(); err.emit();
hir::TyKind::Err hir::TyKind::Err
} }

View File

@ -455,9 +455,6 @@ pub fn set(&self, features: &mut Features, span: Span) {
/// Allows non-builtin attributes in inner attribute position. /// Allows non-builtin attributes in inner attribute position.
(active, custom_inner_attributes, "1.30.0", Some(54726), None), (active, custom_inner_attributes, "1.30.0", Some(54726), None),
/// Allows `impl Trait` in bindings (`let`, `const`, `static`).
(incomplete, impl_trait_in_bindings, "1.30.0", Some(63065), None),
/// Allows using `reason` in lint attributes and the `#[expect(lint)]` lint check. /// Allows using `reason` in lint attributes and the `#[expect(lint)]` lint check.
(active, lint_reasons, "1.31.0", Some(54503), None), (active, lint_reasons, "1.31.0", Some(54503), None),

View File

@ -148,6 +148,10 @@ macro_rules! declare_features {
(removed, const_raw_ptr_to_usize_cast, "1.55.0", Some(51910), None, (removed, const_raw_ptr_to_usize_cast, "1.55.0", Some(51910), None,
Some("at compile-time, pointers do not have an integer value, so these casts cannot be properly supported")), Some("at compile-time, pointers do not have an integer value, so these casts cannot be properly supported")),
/// Allows `impl Trait` in bindings (`let`, `const`, `static`).
(removed, impl_trait_in_bindings, "1.55.0", Some(63065), None,
Some("removed due to being incomplete and unstable")),
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// feature-group-end: removed features // feature-group-end: removed features
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------

View File

@ -221,9 +221,7 @@ pub(super) fn check_fn<'a, 'tcx>(
fcx.resume_yield_tys = Some((resume_ty, yield_ty)); fcx.resume_yield_tys = Some((resume_ty, yield_ty));
} }
let outer_def_id = tcx.closure_base_def_id(hir.local_def_id(fn_id).to_def_id()).expect_local(); GatherLocalsVisitor::new(&fcx).visit_body(body);
let outer_hir_id = hir.local_def_id_to_hir_id(outer_def_id);
GatherLocalsVisitor::new(&fcx, outer_hir_id).visit_body(body);
// C-variadic fns also have a `VaList` input that's not listed in `fn_sig` // C-variadic fns also have a `VaList` input that's not listed in `fn_sig`
// (as it's created inside the body itself, not passed in from outside). // (as it's created inside the body itself, not passed in from outside).

View File

@ -4,12 +4,11 @@
use rustc_hir::PatKind; use rustc_hir::PatKind;
use rustc_infer::infer::type_variable::{TypeVariableOrigin, TypeVariableOriginKind}; use rustc_infer::infer::type_variable::{TypeVariableOrigin, TypeVariableOriginKind};
use rustc_middle::ty::Ty; use rustc_middle::ty::Ty;
use rustc_span::{sym, Span}; use rustc_span::Span;
use rustc_trait_selection::traits; use rustc_trait_selection::traits;
pub(super) struct GatherLocalsVisitor<'a, 'tcx> { pub(super) struct GatherLocalsVisitor<'a, 'tcx> {
fcx: &'a FnCtxt<'a, 'tcx>, fcx: &'a FnCtxt<'a, 'tcx>,
parent_id: hir::HirId,
// parameters are special cases of patterns, but we want to handle them as // parameters are special cases of patterns, but we want to handle them as
// *distinct* cases. so track when we are hitting a pattern *within* an fn // *distinct* cases. so track when we are hitting a pattern *within* an fn
// parameter. // parameter.
@ -17,8 +16,8 @@ pub(super) struct GatherLocalsVisitor<'a, 'tcx> {
} }
impl<'a, 'tcx> GatherLocalsVisitor<'a, 'tcx> { impl<'a, 'tcx> GatherLocalsVisitor<'a, 'tcx> {
pub(super) fn new(fcx: &'a FnCtxt<'a, 'tcx>, parent_id: hir::HirId) -> Self { pub(super) fn new(fcx: &'a FnCtxt<'a, 'tcx>) -> Self {
Self { fcx, parent_id, outermost_fn_param_pat: None } Self { fcx, outermost_fn_param_pat: None }
} }
fn assign(&mut self, span: Span, nid: hir::HirId, ty_opt: Option<LocalTy<'tcx>>) -> Ty<'tcx> { fn assign(&mut self, span: Span, nid: hir::HirId, ty_opt: Option<LocalTy<'tcx>>) -> Ty<'tcx> {
@ -57,26 +56,15 @@ fn visit_local(&mut self, local: &'tcx hir::Local<'tcx>) {
Some(ref ty) => { Some(ref ty) => {
let o_ty = self.fcx.to_ty(&ty); let o_ty = self.fcx.to_ty(&ty);
let revealed_ty = self.fcx.instantiate_opaque_types_from_value( let c_ty = self.fcx.inh.infcx.canonicalize_user_type_annotation(UserType::Ty(o_ty));
self.parent_id, debug!("visit_local: ty.hir_id={:?} o_ty={:?} c_ty={:?}", ty.hir_id, o_ty, c_ty);
o_ty,
ty.span,
Some(sym::impl_trait_in_bindings),
);
let c_ty =
self.fcx.inh.infcx.canonicalize_user_type_annotation(UserType::Ty(revealed_ty));
debug!(
"visit_local: ty.hir_id={:?} o_ty={:?} revealed_ty={:?} c_ty={:?}",
ty.hir_id, o_ty, revealed_ty, c_ty
);
self.fcx self.fcx
.typeck_results .typeck_results
.borrow_mut() .borrow_mut()
.user_provided_types_mut() .user_provided_types_mut()
.insert(ty.hir_id, c_ty); .insert(ty.hir_id, c_ty);
Some(LocalTy { decl_ty: o_ty, revealed_ty }) Some(LocalTy { decl_ty: o_ty, revealed_ty: o_ty })
} }
None => None, None => None,
}; };

View File

@ -118,9 +118,9 @@
use rustc_session::config; use rustc_session::config;
use rustc_session::parse::feature_err; use rustc_session::parse::feature_err;
use rustc_session::Session; use rustc_session::Session;
use rustc_span::source_map::DUMMY_SP;
use rustc_span::symbol::{kw, Ident}; use rustc_span::symbol::{kw, Ident};
use rustc_span::{self, BytePos, MultiSpan, Span}; use rustc_span::{self, BytePos, MultiSpan, Span};
use rustc_span::{source_map::DUMMY_SP, sym};
use rustc_target::abi::VariantIdx; use rustc_target::abi::VariantIdx;
use rustc_target::spec::abi::Abi; use rustc_target::spec::abi::Abi;
use rustc_trait_selection::traits; use rustc_trait_selection::traits;
@ -441,19 +441,12 @@ fn typeck_with_fallback<'tcx>(
let expected_type = fcx.normalize_associated_types_in(body.value.span, expected_type); let expected_type = fcx.normalize_associated_types_in(body.value.span, expected_type);
fcx.require_type_is_sized(expected_type, body.value.span, traits::ConstSized); fcx.require_type_is_sized(expected_type, body.value.span, traits::ConstSized);
let revealed_ty = fcx.instantiate_opaque_types_from_value(
id,
expected_type,
body.value.span,
Some(sym::impl_trait_in_bindings),
);
// Gather locals in statics (because of block expressions). // Gather locals in statics (because of block expressions).
GatherLocalsVisitor::new(&fcx, id).visit_body(body); GatherLocalsVisitor::new(&fcx).visit_body(body);
fcx.check_expr_coercable_to_type(&body.value, revealed_ty, None); fcx.check_expr_coercable_to_type(&body.value, expected_type, None);
fcx.write_ty(id, revealed_ty); fcx.write_ty(id, expected_type);
fcx fcx
}; };

View File

@ -1,28 +0,0 @@
# `impl_trait_in_bindings`
The tracking issue for this feature is: [#63065]
[#63065]: https://github.com/rust-lang/rust/issues/63065
------------------------
The `impl_trait_in_bindings` feature gate lets you use `impl Trait` syntax in
`let`, `static`, and `const` bindings.
A simple example is:
```rust
#![feature(impl_trait_in_bindings)]
use std::fmt::Debug;
fn main() {
let a: impl Debug + Clone = 42;
let b = a.clone();
println!("{:?}", b); // prints `42`
}
```
Note however that because the types of `a` and `b` are opaque in the above
example, calling inherent methods or methods outside of the specified traits
(e.g., `a.abs()` or `b.abs()`) is not allowed, and yields an error.

View File

@ -7,16 +7,8 @@ LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/duplicate.rs:6:12
|
LL | #![feature(impl_trait_in_bindings)]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:11:36 --> $DIR/duplicate.rs:10:36
| |
LL | struct SI1<T: Iterator<Item: Copy, Item: Send>> { f: T } LL | struct SI1<T: Iterator<Item: Copy, Item: Send>> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -24,7 +16,7 @@ LL | struct SI1<T: Iterator<Item: Copy, Item: Send>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:13:36 --> $DIR/duplicate.rs:12:36
| |
LL | struct SI2<T: Iterator<Item: Copy, Item: Copy>> { f: T } LL | struct SI2<T: Iterator<Item: Copy, Item: Copy>> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -32,7 +24,7 @@ LL | struct SI2<T: Iterator<Item: Copy, Item: Copy>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:15:39 --> $DIR/duplicate.rs:14:39
| |
LL | struct SI3<T: Iterator<Item: 'static, Item: 'static>> { f: T } LL | struct SI3<T: Iterator<Item: 'static, Item: 'static>> { f: T }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -40,7 +32,7 @@ LL | struct SI3<T: Iterator<Item: 'static, Item: 'static>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:17:45 --> $DIR/duplicate.rs:16:45
| |
LL | struct SW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T } LL | struct SW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -48,7 +40,7 @@ LL | struct SW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:19:45 --> $DIR/duplicate.rs:18:45
| |
LL | struct SW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T } LL | struct SW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -56,7 +48,7 @@ LL | struct SW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:21:48 --> $DIR/duplicate.rs:20:48
| |
LL | struct SW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T } LL | struct SW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -64,7 +56,7 @@ LL | struct SW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:24:34 --> $DIR/duplicate.rs:23:34
| |
LL | enum EI1<T: Iterator<Item: Copy, Item: Send>> { V(T) } LL | enum EI1<T: Iterator<Item: Copy, Item: Send>> { V(T) }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -72,7 +64,7 @@ LL | enum EI1<T: Iterator<Item: Copy, Item: Send>> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:26:34 --> $DIR/duplicate.rs:25:34
| |
LL | enum EI2<T: Iterator<Item: Copy, Item: Copy>> { V(T) } LL | enum EI2<T: Iterator<Item: Copy, Item: Copy>> { V(T) }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -80,7 +72,7 @@ LL | enum EI2<T: Iterator<Item: Copy, Item: Copy>> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:28:37 --> $DIR/duplicate.rs:27:37
| |
LL | enum EI3<T: Iterator<Item: 'static, Item: 'static>> { V(T) } LL | enum EI3<T: Iterator<Item: 'static, Item: 'static>> { V(T) }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -88,7 +80,7 @@ LL | enum EI3<T: Iterator<Item: 'static, Item: 'static>> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:30:43 --> $DIR/duplicate.rs:29:43
| |
LL | enum EW1<T> where T: Iterator<Item: Copy, Item: Send> { V(T) } LL | enum EW1<T> where T: Iterator<Item: Copy, Item: Send> { V(T) }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -96,7 +88,7 @@ LL | enum EW1<T> where T: Iterator<Item: Copy, Item: Send> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:32:43 --> $DIR/duplicate.rs:31:43
| |
LL | enum EW2<T> where T: Iterator<Item: Copy, Item: Copy> { V(T) } LL | enum EW2<T> where T: Iterator<Item: Copy, Item: Copy> { V(T) }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -104,7 +96,7 @@ LL | enum EW2<T> where T: Iterator<Item: Copy, Item: Copy> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:34:46 --> $DIR/duplicate.rs:33:46
| |
LL | enum EW3<T> where T: Iterator<Item: 'static, Item: 'static> { V(T) } LL | enum EW3<T> where T: Iterator<Item: 'static, Item: 'static> { V(T) }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -112,7 +104,7 @@ LL | enum EW3<T> where T: Iterator<Item: 'static, Item: 'static> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:37:35 --> $DIR/duplicate.rs:36:35
| |
LL | union UI1<T: Iterator<Item: Copy, Item: Send>> { f: T } LL | union UI1<T: Iterator<Item: Copy, Item: Send>> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -120,7 +112,7 @@ LL | union UI1<T: Iterator<Item: Copy, Item: Send>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:39:35 --> $DIR/duplicate.rs:38:35
| |
LL | union UI2<T: Iterator<Item: Copy, Item: Copy>> { f: T } LL | union UI2<T: Iterator<Item: Copy, Item: Copy>> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -128,7 +120,7 @@ LL | union UI2<T: Iterator<Item: Copy, Item: Copy>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:41:38 --> $DIR/duplicate.rs:40:38
| |
LL | union UI3<T: Iterator<Item: 'static, Item: 'static>> { f: T } LL | union UI3<T: Iterator<Item: 'static, Item: 'static>> { f: T }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -136,7 +128,7 @@ LL | union UI3<T: Iterator<Item: 'static, Item: 'static>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:43:44 --> $DIR/duplicate.rs:42:44
| |
LL | union UW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T } LL | union UW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -144,7 +136,7 @@ LL | union UW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:45:44 --> $DIR/duplicate.rs:44:44
| |
LL | union UW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T } LL | union UW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -152,7 +144,7 @@ LL | union UW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:47:47 --> $DIR/duplicate.rs:46:47
| |
LL | union UW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T } LL | union UW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -160,7 +152,7 @@ LL | union UW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:50:32 --> $DIR/duplicate.rs:49:32
| |
LL | fn FI1<T: Iterator<Item: Copy, Item: Send>>() {} LL | fn FI1<T: Iterator<Item: Copy, Item: Send>>() {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -168,7 +160,7 @@ LL | fn FI1<T: Iterator<Item: Copy, Item: Send>>() {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:52:32 --> $DIR/duplicate.rs:51:32
| |
LL | fn FI2<T: Iterator<Item: Copy, Item: Copy>>() {} LL | fn FI2<T: Iterator<Item: Copy, Item: Copy>>() {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -176,7 +168,7 @@ LL | fn FI2<T: Iterator<Item: Copy, Item: Copy>>() {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:54:35 --> $DIR/duplicate.rs:53:35
| |
LL | fn FI3<T: Iterator<Item: 'static, Item: 'static>>() {} LL | fn FI3<T: Iterator<Item: 'static, Item: 'static>>() {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -184,7 +176,7 @@ LL | fn FI3<T: Iterator<Item: 'static, Item: 'static>>() {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:56:43 --> $DIR/duplicate.rs:55:43
| |
LL | fn FW1<T>() where T: Iterator<Item: Copy, Item: Send> {} LL | fn FW1<T>() where T: Iterator<Item: Copy, Item: Send> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -192,7 +184,7 @@ LL | fn FW1<T>() where T: Iterator<Item: Copy, Item: Send> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:58:43 --> $DIR/duplicate.rs:57:43
| |
LL | fn FW2<T>() where T: Iterator<Item: Copy, Item: Copy> {} LL | fn FW2<T>() where T: Iterator<Item: Copy, Item: Copy> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -200,7 +192,7 @@ LL | fn FW2<T>() where T: Iterator<Item: Copy, Item: Copy> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:60:46 --> $DIR/duplicate.rs:59:46
| |
LL | fn FW3<T>() where T: Iterator<Item: 'static, Item: 'static> {} LL | fn FW3<T>() where T: Iterator<Item: 'static, Item: 'static> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -208,7 +200,7 @@ LL | fn FW3<T>() where T: Iterator<Item: 'static, Item: 'static> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:66:40 --> $DIR/duplicate.rs:65:40
| |
LL | fn FAPIT1(_: impl Iterator<Item: Copy, Item: Send>) {} LL | fn FAPIT1(_: impl Iterator<Item: Copy, Item: Send>) {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -216,7 +208,7 @@ LL | fn FAPIT1(_: impl Iterator<Item: Copy, Item: Send>) {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:68:40 --> $DIR/duplicate.rs:67:40
| |
LL | fn FAPIT2(_: impl Iterator<Item: Copy, Item: Copy>) {} LL | fn FAPIT2(_: impl Iterator<Item: Copy, Item: Copy>) {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -224,7 +216,7 @@ LL | fn FAPIT2(_: impl Iterator<Item: Copy, Item: Copy>) {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:70:43 --> $DIR/duplicate.rs:69:43
| |
LL | fn FAPIT3(_: impl Iterator<Item: 'static, Item: 'static>) {} LL | fn FAPIT3(_: impl Iterator<Item: 'static, Item: 'static>) {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -232,7 +224,7 @@ LL | fn FAPIT3(_: impl Iterator<Item: 'static, Item: 'static>) {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:73:35 --> $DIR/duplicate.rs:72:35
| |
LL | type TAI1<T: Iterator<Item: Copy, Item: Send>> = T; LL | type TAI1<T: Iterator<Item: Copy, Item: Send>> = T;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -240,7 +232,7 @@ LL | type TAI1<T: Iterator<Item: Copy, Item: Send>> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:75:35 --> $DIR/duplicate.rs:74:35
| |
LL | type TAI2<T: Iterator<Item: Copy, Item: Copy>> = T; LL | type TAI2<T: Iterator<Item: Copy, Item: Copy>> = T;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -248,7 +240,7 @@ LL | type TAI2<T: Iterator<Item: Copy, Item: Copy>> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:77:38 --> $DIR/duplicate.rs:76:38
| |
LL | type TAI3<T: Iterator<Item: 'static, Item: 'static>> = T; LL | type TAI3<T: Iterator<Item: 'static, Item: 'static>> = T;
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -256,7 +248,7 @@ LL | type TAI3<T: Iterator<Item: 'static, Item: 'static>> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:79:44 --> $DIR/duplicate.rs:78:44
| |
LL | type TAW1<T> where T: Iterator<Item: Copy, Item: Send> = T; LL | type TAW1<T> where T: Iterator<Item: Copy, Item: Send> = T;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -264,7 +256,7 @@ LL | type TAW1<T> where T: Iterator<Item: Copy, Item: Send> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:81:44 --> $DIR/duplicate.rs:80:44
| |
LL | type TAW2<T> where T: Iterator<Item: Copy, Item: Copy> = T; LL | type TAW2<T> where T: Iterator<Item: Copy, Item: Copy> = T;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -272,7 +264,7 @@ LL | type TAW2<T> where T: Iterator<Item: Copy, Item: Copy> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:83:47 --> $DIR/duplicate.rs:82:47
| |
LL | type TAW3<T> where T: Iterator<Item: 'static, Item: 'static> = T; LL | type TAW3<T> where T: Iterator<Item: 'static, Item: 'static> = T;
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -280,7 +272,7 @@ LL | type TAW3<T> where T: Iterator<Item: 'static, Item: 'static> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:86:36 --> $DIR/duplicate.rs:85:36
| |
LL | type ETAI1<T: Iterator<Item: Copy, Item: Send>> = impl Copy; LL | type ETAI1<T: Iterator<Item: Copy, Item: Send>> = impl Copy;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -288,7 +280,7 @@ LL | type ETAI1<T: Iterator<Item: Copy, Item: Send>> = impl Copy;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:88:36 --> $DIR/duplicate.rs:87:36
| |
LL | type ETAI2<T: Iterator<Item: Copy, Item: Copy>> = impl Copy; LL | type ETAI2<T: Iterator<Item: Copy, Item: Copy>> = impl Copy;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -296,7 +288,7 @@ LL | type ETAI2<T: Iterator<Item: Copy, Item: Copy>> = impl Copy;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:90:39 --> $DIR/duplicate.rs:89:39
| |
LL | type ETAI3<T: Iterator<Item: 'static, Item: 'static>> = impl Copy; LL | type ETAI3<T: Iterator<Item: 'static, Item: 'static>> = impl Copy;
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -304,7 +296,7 @@ LL | type ETAI3<T: Iterator<Item: 'static, Item: 'static>> = impl Copy;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:92:40 --> $DIR/duplicate.rs:91:40
| |
LL | type ETAI4 = impl Iterator<Item: Copy, Item: Send>; LL | type ETAI4 = impl Iterator<Item: Copy, Item: Send>;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -312,7 +304,7 @@ LL | type ETAI4 = impl Iterator<Item: Copy, Item: Send>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:94:40 --> $DIR/duplicate.rs:93:40
| |
LL | type ETAI5 = impl Iterator<Item: Copy, Item: Copy>; LL | type ETAI5 = impl Iterator<Item: Copy, Item: Copy>;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -320,7 +312,7 @@ LL | type ETAI5 = impl Iterator<Item: Copy, Item: Copy>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:96:43 --> $DIR/duplicate.rs:95:43
| |
LL | type ETAI6 = impl Iterator<Item: 'static, Item: 'static>; LL | type ETAI6 = impl Iterator<Item: 'static, Item: 'static>;
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -328,7 +320,7 @@ LL | type ETAI6 = impl Iterator<Item: 'static, Item: 'static>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:99:36 --> $DIR/duplicate.rs:98:36
| |
LL | trait TRI1<T: Iterator<Item: Copy, Item: Send>> {} LL | trait TRI1<T: Iterator<Item: Copy, Item: Send>> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -336,7 +328,7 @@ LL | trait TRI1<T: Iterator<Item: Copy, Item: Send>> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:101:36 --> $DIR/duplicate.rs:100:36
| |
LL | trait TRI2<T: Iterator<Item: Copy, Item: Copy>> {} LL | trait TRI2<T: Iterator<Item: Copy, Item: Copy>> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -344,7 +336,7 @@ LL | trait TRI2<T: Iterator<Item: Copy, Item: Copy>> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:103:39 --> $DIR/duplicate.rs:102:39
| |
LL | trait TRI3<T: Iterator<Item: 'static, Item: 'static>> {} LL | trait TRI3<T: Iterator<Item: 'static, Item: 'static>> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -352,7 +344,7 @@ LL | trait TRI3<T: Iterator<Item: 'static, Item: 'static>> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:105:34 --> $DIR/duplicate.rs:104:34
| |
LL | trait TRS1: Iterator<Item: Copy, Item: Send> {} LL | trait TRS1: Iterator<Item: Copy, Item: Send> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -360,7 +352,7 @@ LL | trait TRS1: Iterator<Item: Copy, Item: Send> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:107:34 --> $DIR/duplicate.rs:106:34
| |
LL | trait TRS2: Iterator<Item: Copy, Item: Copy> {} LL | trait TRS2: Iterator<Item: Copy, Item: Copy> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -368,7 +360,7 @@ LL | trait TRS2: Iterator<Item: Copy, Item: Copy> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:109:37 --> $DIR/duplicate.rs:108:37
| |
LL | trait TRS3: Iterator<Item: 'static, Item: 'static> {} LL | trait TRS3: Iterator<Item: 'static, Item: 'static> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -376,7 +368,7 @@ LL | trait TRS3: Iterator<Item: 'static, Item: 'static> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:111:45 --> $DIR/duplicate.rs:110:45
| |
LL | trait TRW1<T> where T: Iterator<Item: Copy, Item: Send> {} LL | trait TRW1<T> where T: Iterator<Item: Copy, Item: Send> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -384,7 +376,7 @@ LL | trait TRW1<T> where T: Iterator<Item: Copy, Item: Send> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:113:45 --> $DIR/duplicate.rs:112:45
| |
LL | trait TRW2<T> where T: Iterator<Item: Copy, Item: Copy> {} LL | trait TRW2<T> where T: Iterator<Item: Copy, Item: Copy> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -392,7 +384,7 @@ LL | trait TRW2<T> where T: Iterator<Item: Copy, Item: Copy> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:115:48 --> $DIR/duplicate.rs:114:48
| |
LL | trait TRW3<T> where T: Iterator<Item: 'static, Item: 'static> {} LL | trait TRW3<T> where T: Iterator<Item: 'static, Item: 'static> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -400,7 +392,7 @@ LL | trait TRW3<T> where T: Iterator<Item: 'static, Item: 'static> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:117:46 --> $DIR/duplicate.rs:116:46
| |
LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {} LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -408,7 +400,7 @@ LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:117:46 --> $DIR/duplicate.rs:116:46
| |
LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {} LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -416,7 +408,7 @@ LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:120:46 --> $DIR/duplicate.rs:119:46
| |
LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {} LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -424,7 +416,7 @@ LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:120:46 --> $DIR/duplicate.rs:119:46
| |
LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {} LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -432,7 +424,7 @@ LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:123:49 --> $DIR/duplicate.rs:122:49
| |
LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {} LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -440,7 +432,7 @@ LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:123:49 --> $DIR/duplicate.rs:122:49
| |
LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {} LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -448,7 +440,7 @@ LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:133:40 --> $DIR/duplicate.rs:132:40
| |
LL | type TADyn1 = dyn Iterator<Item: Copy, Item: Send>; LL | type TADyn1 = dyn Iterator<Item: Copy, Item: Send>;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -456,7 +448,7 @@ LL | type TADyn1 = dyn Iterator<Item: Copy, Item: Send>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:135:44 --> $DIR/duplicate.rs:134:44
| |
LL | type TADyn2 = Box<dyn Iterator<Item: Copy, Item: Copy>>; LL | type TADyn2 = Box<dyn Iterator<Item: Copy, Item: Copy>>;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -464,7 +456,7 @@ LL | type TADyn2 = Box<dyn Iterator<Item: Copy, Item: Copy>>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:137:43 --> $DIR/duplicate.rs:136:43
| |
LL | type TADyn3 = dyn Iterator<Item: 'static, Item: 'static>; LL | type TADyn3 = dyn Iterator<Item: 'static, Item: 'static>;
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -472,7 +464,7 @@ LL | type TADyn3 = dyn Iterator<Item: 'static, Item: 'static>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:126:43 --> $DIR/duplicate.rs:125:43
| |
LL | trait TRA1 { type A: Iterator<Item: Copy, Item: Send>; } LL | trait TRA1 { type A: Iterator<Item: Copy, Item: Send>; }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -480,7 +472,7 @@ LL | trait TRA1 { type A: Iterator<Item: Copy, Item: Send>; }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:128:43 --> $DIR/duplicate.rs:127:43
| |
LL | trait TRA2 { type A: Iterator<Item: Copy, Item: Copy>; } LL | trait TRA2 { type A: Iterator<Item: Copy, Item: Copy>; }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -488,13 +480,13 @@ LL | trait TRA2 { type A: Iterator<Item: Copy, Item: Copy>; }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:130:46 --> $DIR/duplicate.rs:129:46
| |
LL | trait TRA3 { type A: Iterator<Item: 'static, Item: 'static>; } LL | trait TRA3 { type A: Iterator<Item: 'static, Item: 'static>; }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
| | | |
| `Item` bound here first | `Item` bound here first
error: aborting due to 60 previous errors; 2 warnings emitted error: aborting due to 60 previous errors; 1 warning emitted
For more information about this error, try `rustc --explain E0719`. For more information about this error, try `rustc --explain E0719`.

View File

@ -1,14 +1,5 @@
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/duplicate.rs:6:12
|
LL | #![feature(impl_trait_in_bindings)]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:11:36 --> $DIR/duplicate.rs:10:36
| |
LL | struct SI1<T: Iterator<Item: Copy, Item: Send>> { f: T } LL | struct SI1<T: Iterator<Item: Copy, Item: Send>> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -16,7 +7,7 @@ LL | struct SI1<T: Iterator<Item: Copy, Item: Send>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:13:36 --> $DIR/duplicate.rs:12:36
| |
LL | struct SI2<T: Iterator<Item: Copy, Item: Copy>> { f: T } LL | struct SI2<T: Iterator<Item: Copy, Item: Copy>> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -24,7 +15,7 @@ LL | struct SI2<T: Iterator<Item: Copy, Item: Copy>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:15:39 --> $DIR/duplicate.rs:14:39
| |
LL | struct SI3<T: Iterator<Item: 'static, Item: 'static>> { f: T } LL | struct SI3<T: Iterator<Item: 'static, Item: 'static>> { f: T }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -32,7 +23,7 @@ LL | struct SI3<T: Iterator<Item: 'static, Item: 'static>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:17:45 --> $DIR/duplicate.rs:16:45
| |
LL | struct SW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T } LL | struct SW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -40,7 +31,7 @@ LL | struct SW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:19:45 --> $DIR/duplicate.rs:18:45
| |
LL | struct SW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T } LL | struct SW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -48,7 +39,7 @@ LL | struct SW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:21:48 --> $DIR/duplicate.rs:20:48
| |
LL | struct SW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T } LL | struct SW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -56,7 +47,7 @@ LL | struct SW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:24:34 --> $DIR/duplicate.rs:23:34
| |
LL | enum EI1<T: Iterator<Item: Copy, Item: Send>> { V(T) } LL | enum EI1<T: Iterator<Item: Copy, Item: Send>> { V(T) }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -64,7 +55,7 @@ LL | enum EI1<T: Iterator<Item: Copy, Item: Send>> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:26:34 --> $DIR/duplicate.rs:25:34
| |
LL | enum EI2<T: Iterator<Item: Copy, Item: Copy>> { V(T) } LL | enum EI2<T: Iterator<Item: Copy, Item: Copy>> { V(T) }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -72,7 +63,7 @@ LL | enum EI2<T: Iterator<Item: Copy, Item: Copy>> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:28:37 --> $DIR/duplicate.rs:27:37
| |
LL | enum EI3<T: Iterator<Item: 'static, Item: 'static>> { V(T) } LL | enum EI3<T: Iterator<Item: 'static, Item: 'static>> { V(T) }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -80,7 +71,7 @@ LL | enum EI3<T: Iterator<Item: 'static, Item: 'static>> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:30:43 --> $DIR/duplicate.rs:29:43
| |
LL | enum EW1<T> where T: Iterator<Item: Copy, Item: Send> { V(T) } LL | enum EW1<T> where T: Iterator<Item: Copy, Item: Send> { V(T) }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -88,7 +79,7 @@ LL | enum EW1<T> where T: Iterator<Item: Copy, Item: Send> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:32:43 --> $DIR/duplicate.rs:31:43
| |
LL | enum EW2<T> where T: Iterator<Item: Copy, Item: Copy> { V(T) } LL | enum EW2<T> where T: Iterator<Item: Copy, Item: Copy> { V(T) }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -96,7 +87,7 @@ LL | enum EW2<T> where T: Iterator<Item: Copy, Item: Copy> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:34:46 --> $DIR/duplicate.rs:33:46
| |
LL | enum EW3<T> where T: Iterator<Item: 'static, Item: 'static> { V(T) } LL | enum EW3<T> where T: Iterator<Item: 'static, Item: 'static> { V(T) }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -104,7 +95,7 @@ LL | enum EW3<T> where T: Iterator<Item: 'static, Item: 'static> { V(T) }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:37:35 --> $DIR/duplicate.rs:36:35
| |
LL | union UI1<T: Iterator<Item: Copy, Item: Send>> { f: T } LL | union UI1<T: Iterator<Item: Copy, Item: Send>> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -112,7 +103,7 @@ LL | union UI1<T: Iterator<Item: Copy, Item: Send>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:39:35 --> $DIR/duplicate.rs:38:35
| |
LL | union UI2<T: Iterator<Item: Copy, Item: Copy>> { f: T } LL | union UI2<T: Iterator<Item: Copy, Item: Copy>> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -120,7 +111,7 @@ LL | union UI2<T: Iterator<Item: Copy, Item: Copy>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:41:38 --> $DIR/duplicate.rs:40:38
| |
LL | union UI3<T: Iterator<Item: 'static, Item: 'static>> { f: T } LL | union UI3<T: Iterator<Item: 'static, Item: 'static>> { f: T }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -128,7 +119,7 @@ LL | union UI3<T: Iterator<Item: 'static, Item: 'static>> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:43:44 --> $DIR/duplicate.rs:42:44
| |
LL | union UW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T } LL | union UW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -136,7 +127,7 @@ LL | union UW1<T> where T: Iterator<Item: Copy, Item: Send> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:45:44 --> $DIR/duplicate.rs:44:44
| |
LL | union UW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T } LL | union UW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -144,7 +135,7 @@ LL | union UW2<T> where T: Iterator<Item: Copy, Item: Copy> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:47:47 --> $DIR/duplicate.rs:46:47
| |
LL | union UW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T } LL | union UW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -152,7 +143,7 @@ LL | union UW3<T> where T: Iterator<Item: 'static, Item: 'static> { f: T }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:50:32 --> $DIR/duplicate.rs:49:32
| |
LL | fn FI1<T: Iterator<Item: Copy, Item: Send>>() {} LL | fn FI1<T: Iterator<Item: Copy, Item: Send>>() {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -160,7 +151,7 @@ LL | fn FI1<T: Iterator<Item: Copy, Item: Send>>() {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:52:32 --> $DIR/duplicate.rs:51:32
| |
LL | fn FI2<T: Iterator<Item: Copy, Item: Copy>>() {} LL | fn FI2<T: Iterator<Item: Copy, Item: Copy>>() {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -168,7 +159,7 @@ LL | fn FI2<T: Iterator<Item: Copy, Item: Copy>>() {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:54:35 --> $DIR/duplicate.rs:53:35
| |
LL | fn FI3<T: Iterator<Item: 'static, Item: 'static>>() {} LL | fn FI3<T: Iterator<Item: 'static, Item: 'static>>() {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -176,7 +167,7 @@ LL | fn FI3<T: Iterator<Item: 'static, Item: 'static>>() {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:56:43 --> $DIR/duplicate.rs:55:43
| |
LL | fn FW1<T>() where T: Iterator<Item: Copy, Item: Send> {} LL | fn FW1<T>() where T: Iterator<Item: Copy, Item: Send> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -184,7 +175,7 @@ LL | fn FW1<T>() where T: Iterator<Item: Copy, Item: Send> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:58:43 --> $DIR/duplicate.rs:57:43
| |
LL | fn FW2<T>() where T: Iterator<Item: Copy, Item: Copy> {} LL | fn FW2<T>() where T: Iterator<Item: Copy, Item: Copy> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -192,7 +183,7 @@ LL | fn FW2<T>() where T: Iterator<Item: Copy, Item: Copy> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:60:46 --> $DIR/duplicate.rs:59:46
| |
LL | fn FW3<T>() where T: Iterator<Item: 'static, Item: 'static> {} LL | fn FW3<T>() where T: Iterator<Item: 'static, Item: 'static> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -200,7 +191,7 @@ LL | fn FW3<T>() where T: Iterator<Item: 'static, Item: 'static> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:66:40 --> $DIR/duplicate.rs:65:40
| |
LL | fn FAPIT1(_: impl Iterator<Item: Copy, Item: Send>) {} LL | fn FAPIT1(_: impl Iterator<Item: Copy, Item: Send>) {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -208,7 +199,7 @@ LL | fn FAPIT1(_: impl Iterator<Item: Copy, Item: Send>) {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:68:40 --> $DIR/duplicate.rs:67:40
| |
LL | fn FAPIT2(_: impl Iterator<Item: Copy, Item: Copy>) {} LL | fn FAPIT2(_: impl Iterator<Item: Copy, Item: Copy>) {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -216,7 +207,7 @@ LL | fn FAPIT2(_: impl Iterator<Item: Copy, Item: Copy>) {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:70:43 --> $DIR/duplicate.rs:69:43
| |
LL | fn FAPIT3(_: impl Iterator<Item: 'static, Item: 'static>) {} LL | fn FAPIT3(_: impl Iterator<Item: 'static, Item: 'static>) {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -224,7 +215,7 @@ LL | fn FAPIT3(_: impl Iterator<Item: 'static, Item: 'static>) {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:73:35 --> $DIR/duplicate.rs:72:35
| |
LL | type TAI1<T: Iterator<Item: Copy, Item: Send>> = T; LL | type TAI1<T: Iterator<Item: Copy, Item: Send>> = T;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -232,7 +223,7 @@ LL | type TAI1<T: Iterator<Item: Copy, Item: Send>> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:75:35 --> $DIR/duplicate.rs:74:35
| |
LL | type TAI2<T: Iterator<Item: Copy, Item: Copy>> = T; LL | type TAI2<T: Iterator<Item: Copy, Item: Copy>> = T;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -240,7 +231,7 @@ LL | type TAI2<T: Iterator<Item: Copy, Item: Copy>> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:77:38 --> $DIR/duplicate.rs:76:38
| |
LL | type TAI3<T: Iterator<Item: 'static, Item: 'static>> = T; LL | type TAI3<T: Iterator<Item: 'static, Item: 'static>> = T;
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -248,7 +239,7 @@ LL | type TAI3<T: Iterator<Item: 'static, Item: 'static>> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:79:44 --> $DIR/duplicate.rs:78:44
| |
LL | type TAW1<T> where T: Iterator<Item: Copy, Item: Send> = T; LL | type TAW1<T> where T: Iterator<Item: Copy, Item: Send> = T;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -256,7 +247,7 @@ LL | type TAW1<T> where T: Iterator<Item: Copy, Item: Send> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:81:44 --> $DIR/duplicate.rs:80:44
| |
LL | type TAW2<T> where T: Iterator<Item: Copy, Item: Copy> = T; LL | type TAW2<T> where T: Iterator<Item: Copy, Item: Copy> = T;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -264,7 +255,7 @@ LL | type TAW2<T> where T: Iterator<Item: Copy, Item: Copy> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:83:47 --> $DIR/duplicate.rs:82:47
| |
LL | type TAW3<T> where T: Iterator<Item: 'static, Item: 'static> = T; LL | type TAW3<T> where T: Iterator<Item: 'static, Item: 'static> = T;
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -272,7 +263,7 @@ LL | type TAW3<T> where T: Iterator<Item: 'static, Item: 'static> = T;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:86:36 --> $DIR/duplicate.rs:85:36
| |
LL | type ETAI1<T: Iterator<Item: Copy, Item: Send>> = impl Copy; LL | type ETAI1<T: Iterator<Item: Copy, Item: Send>> = impl Copy;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -280,7 +271,7 @@ LL | type ETAI1<T: Iterator<Item: Copy, Item: Send>> = impl Copy;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:88:36 --> $DIR/duplicate.rs:87:36
| |
LL | type ETAI2<T: Iterator<Item: Copy, Item: Copy>> = impl Copy; LL | type ETAI2<T: Iterator<Item: Copy, Item: Copy>> = impl Copy;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -288,7 +279,7 @@ LL | type ETAI2<T: Iterator<Item: Copy, Item: Copy>> = impl Copy;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:90:39 --> $DIR/duplicate.rs:89:39
| |
LL | type ETAI3<T: Iterator<Item: 'static, Item: 'static>> = impl Copy; LL | type ETAI3<T: Iterator<Item: 'static, Item: 'static>> = impl Copy;
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -296,7 +287,7 @@ LL | type ETAI3<T: Iterator<Item: 'static, Item: 'static>> = impl Copy;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:92:40 --> $DIR/duplicate.rs:91:40
| |
LL | type ETAI4 = impl Iterator<Item: Copy, Item: Send>; LL | type ETAI4 = impl Iterator<Item: Copy, Item: Send>;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -304,7 +295,7 @@ LL | type ETAI4 = impl Iterator<Item: Copy, Item: Send>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:94:40 --> $DIR/duplicate.rs:93:40
| |
LL | type ETAI5 = impl Iterator<Item: Copy, Item: Copy>; LL | type ETAI5 = impl Iterator<Item: Copy, Item: Copy>;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -312,7 +303,7 @@ LL | type ETAI5 = impl Iterator<Item: Copy, Item: Copy>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:96:43 --> $DIR/duplicate.rs:95:43
| |
LL | type ETAI6 = impl Iterator<Item: 'static, Item: 'static>; LL | type ETAI6 = impl Iterator<Item: 'static, Item: 'static>;
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -320,7 +311,7 @@ LL | type ETAI6 = impl Iterator<Item: 'static, Item: 'static>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:99:36 --> $DIR/duplicate.rs:98:36
| |
LL | trait TRI1<T: Iterator<Item: Copy, Item: Send>> {} LL | trait TRI1<T: Iterator<Item: Copy, Item: Send>> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -328,7 +319,7 @@ LL | trait TRI1<T: Iterator<Item: Copy, Item: Send>> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:101:36 --> $DIR/duplicate.rs:100:36
| |
LL | trait TRI2<T: Iterator<Item: Copy, Item: Copy>> {} LL | trait TRI2<T: Iterator<Item: Copy, Item: Copy>> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -336,7 +327,7 @@ LL | trait TRI2<T: Iterator<Item: Copy, Item: Copy>> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:103:39 --> $DIR/duplicate.rs:102:39
| |
LL | trait TRI3<T: Iterator<Item: 'static, Item: 'static>> {} LL | trait TRI3<T: Iterator<Item: 'static, Item: 'static>> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -344,7 +335,7 @@ LL | trait TRI3<T: Iterator<Item: 'static, Item: 'static>> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:105:34 --> $DIR/duplicate.rs:104:34
| |
LL | trait TRS1: Iterator<Item: Copy, Item: Send> {} LL | trait TRS1: Iterator<Item: Copy, Item: Send> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -352,7 +343,7 @@ LL | trait TRS1: Iterator<Item: Copy, Item: Send> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:107:34 --> $DIR/duplicate.rs:106:34
| |
LL | trait TRS2: Iterator<Item: Copy, Item: Copy> {} LL | trait TRS2: Iterator<Item: Copy, Item: Copy> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -360,7 +351,7 @@ LL | trait TRS2: Iterator<Item: Copy, Item: Copy> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:109:37 --> $DIR/duplicate.rs:108:37
| |
LL | trait TRS3: Iterator<Item: 'static, Item: 'static> {} LL | trait TRS3: Iterator<Item: 'static, Item: 'static> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -368,7 +359,7 @@ LL | trait TRS3: Iterator<Item: 'static, Item: 'static> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:111:45 --> $DIR/duplicate.rs:110:45
| |
LL | trait TRW1<T> where T: Iterator<Item: Copy, Item: Send> {} LL | trait TRW1<T> where T: Iterator<Item: Copy, Item: Send> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -376,7 +367,7 @@ LL | trait TRW1<T> where T: Iterator<Item: Copy, Item: Send> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:113:45 --> $DIR/duplicate.rs:112:45
| |
LL | trait TRW2<T> where T: Iterator<Item: Copy, Item: Copy> {} LL | trait TRW2<T> where T: Iterator<Item: Copy, Item: Copy> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -384,7 +375,7 @@ LL | trait TRW2<T> where T: Iterator<Item: Copy, Item: Copy> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:115:48 --> $DIR/duplicate.rs:114:48
| |
LL | trait TRW3<T> where T: Iterator<Item: 'static, Item: 'static> {} LL | trait TRW3<T> where T: Iterator<Item: 'static, Item: 'static> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -392,7 +383,7 @@ LL | trait TRW3<T> where T: Iterator<Item: 'static, Item: 'static> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:117:46 --> $DIR/duplicate.rs:116:46
| |
LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {} LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -400,7 +391,7 @@ LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:117:46 --> $DIR/duplicate.rs:116:46
| |
LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {} LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -408,7 +399,7 @@ LL | trait TRSW1 where Self: Iterator<Item: Copy, Item: Send> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:120:46 --> $DIR/duplicate.rs:119:46
| |
LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {} LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -416,7 +407,7 @@ LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:120:46 --> $DIR/duplicate.rs:119:46
| |
LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {} LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {}
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -424,7 +415,7 @@ LL | trait TRSW2 where Self: Iterator<Item: Copy, Item: Copy> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:123:49 --> $DIR/duplicate.rs:122:49
| |
LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {} LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -432,7 +423,7 @@ LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:123:49 --> $DIR/duplicate.rs:122:49
| |
LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {} LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {}
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -440,7 +431,7 @@ LL | trait TRSW3 where Self: Iterator<Item: 'static, Item: 'static> {}
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:133:40 --> $DIR/duplicate.rs:132:40
| |
LL | type TADyn1 = dyn Iterator<Item: Copy, Item: Send>; LL | type TADyn1 = dyn Iterator<Item: Copy, Item: Send>;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -448,7 +439,7 @@ LL | type TADyn1 = dyn Iterator<Item: Copy, Item: Send>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:135:44 --> $DIR/duplicate.rs:134:44
| |
LL | type TADyn2 = Box<dyn Iterator<Item: Copy, Item: Copy>>; LL | type TADyn2 = Box<dyn Iterator<Item: Copy, Item: Copy>>;
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -456,7 +447,7 @@ LL | type TADyn2 = Box<dyn Iterator<Item: Copy, Item: Copy>>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:137:43 --> $DIR/duplicate.rs:136:43
| |
LL | type TADyn3 = dyn Iterator<Item: 'static, Item: 'static>; LL | type TADyn3 = dyn Iterator<Item: 'static, Item: 'static>;
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
@ -464,7 +455,7 @@ LL | type TADyn3 = dyn Iterator<Item: 'static, Item: 'static>;
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:126:43 --> $DIR/duplicate.rs:125:43
| |
LL | trait TRA1 { type A: Iterator<Item: Copy, Item: Send>; } LL | trait TRA1 { type A: Iterator<Item: Copy, Item: Send>; }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -472,7 +463,7 @@ LL | trait TRA1 { type A: Iterator<Item: Copy, Item: Send>; }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:128:43 --> $DIR/duplicate.rs:127:43
| |
LL | trait TRA2 { type A: Iterator<Item: Copy, Item: Copy>; } LL | trait TRA2 { type A: Iterator<Item: Copy, Item: Copy>; }
| ---------- ^^^^^^^^^^ re-bound here | ---------- ^^^^^^^^^^ re-bound here
@ -480,13 +471,13 @@ LL | trait TRA2 { type A: Iterator<Item: Copy, Item: Copy>; }
| `Item` bound here first | `Item` bound here first
error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified
--> $DIR/duplicate.rs:130:46 --> $DIR/duplicate.rs:129:46
| |
LL | trait TRA3 { type A: Iterator<Item: 'static, Item: 'static>; } LL | trait TRA3 { type A: Iterator<Item: 'static, Item: 'static>; }
| ------------- ^^^^^^^^^^^^^ re-bound here | ------------- ^^^^^^^^^^^^^ re-bound here
| | | |
| `Item` bound here first | `Item` bound here first
error: aborting due to 60 previous errors; 1 warning emitted error: aborting due to 60 previous errors
For more information about this error, try `rustc --explain E0719`. For more information about this error, try `rustc --explain E0719`.

View File

@ -3,7 +3,6 @@
#![feature(min_type_alias_impl_trait)] #![feature(min_type_alias_impl_trait)]
#![cfg_attr(full_tait, feature(type_alias_impl_trait))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
#![feature(impl_trait_in_bindings)] //~ WARN the feature `impl_trait_in_bindings` is incomplete
#![feature(untagged_unions)] #![feature(untagged_unions)]
use std::iter; use std::iter;

View File

@ -1,69 +0,0 @@
// run-pass
#![feature(associated_type_bounds)]
#![feature(impl_trait_in_bindings)]
//~^ WARNING `impl_trait_in_bindings` is incomplete
#![allow(non_upper_case_globals)]
use std::ops::Add;
trait Tr1 { type As1; fn mk(&self) -> Self::As1; }
trait Tr2<'a> { fn tr2(self) -> &'a Self; }
fn assert_copy<T: Copy>(x: T) { let _x = x; let _x = x; }
fn assert_static<T: 'static>(_: T) {}
fn assert_forall_tr2<T: for<'a> Tr2<'a>>(_: T) {}
#[derive(Copy, Clone)]
struct S1;
#[derive(Copy, Clone)]
struct S2;
impl Tr1 for S1 { type As1 = S2; fn mk(&self) -> Self::As1 { S2 } }
const cdef_et1: &dyn Tr1<As1: Copy> = &S1;
const sdef_et1: &dyn Tr1<As1: Copy> = &S1;
pub fn use_et1() { assert_copy(cdef_et1.mk()); assert_copy(sdef_et1.mk()); }
const cdef_et2: &(dyn Tr1<As1: 'static> + Sync) = &S1;
static sdef_et2: &(dyn Tr1<As1: 'static> + Sync) = &S1;
pub fn use_et2() { assert_static(cdef_et2.mk()); assert_static(sdef_et2.mk()); }
const cdef_et3: &dyn Tr1<As1: Clone + Iterator<Item: Add<u8, Output: Into<u8>>>> = {
struct A;
impl Tr1 for A {
type As1 = core::ops::Range<u8>;
fn mk(&self) -> Self::As1 { 0..10 }
}
&A
};
pub fn use_et3() {
let _0 = cdef_et3.mk().clone();
let mut s = 0u8;
for _1 in _0 {
let _2 = _1 + 1u8;
s += _2.into();
}
assert_eq!(s, (0..10).map(|x| x + 1).sum());
}
const cdef_et4: &(dyn Tr1<As1: for<'a> Tr2<'a>> + Sync) = {
#[derive(Copy, Clone)]
struct A;
impl Tr1 for A {
type As1 = A;
fn mk(&self) -> A { A }
}
impl<'a> Tr2<'a> for A {
fn tr2(self) -> &'a Self { &A }
}
&A
};
static sdef_et4: &(dyn Tr1<As1: for<'a> Tr2<'a>> + Sync) = cdef_et4;
pub fn use_et4() { assert_forall_tr2(cdef_et4.mk()); assert_forall_tr2(sdef_et4.mk()); }
fn main() {
let _ = use_et1();
let _ = use_et2();
let _ = use_et3();
let _ = use_et4();
}

View File

@ -1,11 +0,0 @@
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/dyn-lcsit.rs:4:12
|
LL | #![feature(impl_trait_in_bindings)]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
warning: 1 warning emitted

View File

@ -1,12 +1,14 @@
#![feature(imported_main)] #![feature(imported_main)]
#![feature(min_type_alias_impl_trait, impl_trait_in_bindings)] #![feature(min_type_alias_impl_trait)]
#![allow(incomplete_features)] #![allow(incomplete_features)]
//~^^^ ERROR `main` function not found in crate //~^^^ ERROR `main` function not found in crate
pub mod foo { pub mod foo {
type MainFn = impl Fn(); type MainFn = impl Fn();
//~^ ERROR could not find defining uses
fn bar() {} fn bar() {}
pub const BAR: MainFn = bar; pub const BAR: MainFn = bar;
//~^ ERROR mismatched types [E0308]
} }
use foo::BAR as main; use foo::BAR as main;

View File

@ -2,7 +2,7 @@ error[E0601]: `main` function not found in crate `imported_main_const_fn_item_ty
--> $DIR/imported_main_const_fn_item_type_forbidden.rs:1:1 --> $DIR/imported_main_const_fn_item_type_forbidden.rs:1:1
| |
LL | / #![feature(imported_main)] LL | / #![feature(imported_main)]
LL | | #![feature(min_type_alias_impl_trait, impl_trait_in_bindings)] LL | | #![feature(min_type_alias_impl_trait)]
LL | | #![allow(incomplete_features)] LL | | #![allow(incomplete_features)]
LL | | LL | |
... | ... |
@ -12,6 +12,25 @@ LL | | use foo::BAR as main;
| | | |
| non-function item at `crate::main` is found | non-function item at `crate::main` is found
error: aborting due to previous error error[E0308]: mismatched types
--> $DIR/imported_main_const_fn_item_type_forbidden.rs:10:29
|
LL | type MainFn = impl Fn();
| --------- the expected opaque type
...
LL | pub const BAR: MainFn = bar;
| ^^^ expected opaque type, found fn item
|
= note: expected opaque type `impl Fn<()>`
found fn item `fn() {bar}`
For more information about this error, try `rustc --explain E0601`. error: could not find defining uses
--> $DIR/imported_main_const_fn_item_type_forbidden.rs:6:19
|
LL | type MainFn = impl Fn();
| ^^^^^^^^^
error: aborting due to 3 previous errors
Some errors have detailed explanations: E0308, E0601.
For more information about an error, try `rustc --explain E0308`.

View File

@ -120,24 +120,18 @@ error[E0562]: `impl Trait` not allowed outside of function and inherent method r
| |
LL | const _cdef: impl Tr1<As1: Copy> = S1; LL | const _cdef: impl Tr1<As1: Copy> = S1;
| ^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
|
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error[E0562]: `impl Trait` not allowed outside of function and inherent method return types error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
--> $DIR/feature-gate-associated_type_bounds.rs:64:15 --> $DIR/feature-gate-associated_type_bounds.rs:64:15
| |
LL | static _sdef: impl Tr1<As1: Copy> = S1; LL | static _sdef: impl Tr1<As1: Copy> = S1;
| ^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
|
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error[E0562]: `impl Trait` not allowed outside of function and inherent method return types error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
--> $DIR/feature-gate-associated_type_bounds.rs:71:12 --> $DIR/feature-gate-associated_type_bounds.rs:71:12
| |
LL | let _: impl Tr1<As1: Copy> = S1; LL | let _: impl Tr1<As1: Copy> = S1;
| ^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
|
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error[E0277]: the trait bound `<<Self as _Tr3>::A as Iterator>::Item: Copy` is not satisfied error[E0277]: the trait bound `<<Self as _Tr3>::A as Iterator>::Item: Copy` is not satisfied
--> $DIR/feature-gate-associated_type_bounds.rs:15:28 --> $DIR/feature-gate-associated_type_bounds.rs:15:28

View File

@ -31,7 +31,7 @@ fn define3_1() {
fn define4() { fn define4() {
let y: Foo4 = 42; let y: Foo4 = 42;
//~^ ERROR not permitted here //~^ ERROR mismatched types [E0308]
} }
fn main() {} fn main() {}

View File

@ -45,14 +45,19 @@ LL | define3(42)
= note: expected opaque type `impl Debug` = note: expected opaque type `impl Debug`
found type `{integer}` found type `{integer}`
error[E0658]: type alias impl trait is not permitted here error[E0308]: mismatched types
--> $DIR/feature-gate-type_alias_impl_trait.rs:33:12 --> $DIR/feature-gate-type_alias_impl_trait.rs:33:19
| |
LL | type Foo4 = impl Debug;
| ---------- the expected opaque type
...
LL | let y: Foo4 = 42; LL | let y: Foo4 = 42;
| ^^^^ | ---- ^^ expected opaque type, found integer
| |
| expected due to this
| |
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information = note: expected opaque type `impl Debug`
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable found type `{integer}`
error: could not find defining uses error: could not find defining uses
--> $DIR/feature-gate-type_alias_impl_trait.rs:5:12 --> $DIR/feature-gate-type_alias_impl_trait.rs:5:12

View File

@ -1,26 +1,18 @@
error[E0425]: cannot find value `Foo` in this scope error[E0425]: cannot find value `Foo` in this scope
--> $DIR/layout-error.rs:25:17 --> $DIR/layout-error.rs:24:17
| |
LL | let a = Foo; LL | let a = Foo;
| ^^^ not found in this scope | ^^^ not found in this scope
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/layout-error.rs:8:32 --> $DIR/layout-error.rs:8:32
| |
LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))] LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
| |
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/layout-error.rs:8:56
|
LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
error: aborting due to previous error; 2 warnings emitted error: aborting due to previous error; 1 warning emitted
For more information about this error, try `rustc --explain E0425`. For more information about this error, try `rustc --explain E0425`.

View File

@ -1,11 +1,11 @@
error[E0425]: cannot find value `Foo` in this scope error[E0425]: cannot find value `Foo` in this scope
--> $DIR/layout-error.rs:25:17 --> $DIR/layout-error.rs:24:17
| |
LL | let a = Foo; LL | let a = Foo;
| ^^^ not found in this scope | ^^^ not found in this scope
error[E0658]: type alias impl trait is not permitted here error[E0658]: type alias impl trait is not permitted here
--> $DIR/layout-error.rs:31:27 --> $DIR/layout-error.rs:30:27
| |
LL | Task::spawn(&POOL, || cb()); LL | Task::spawn(&POOL, || cb());
| ^ | ^
@ -13,28 +13,7 @@ LL | Task::spawn(&POOL, || cb());
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
= help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable
error[E0658]: type alias impl trait is not permitted here error: aborting due to 2 previous errors
--> $DIR/layout-error.rs:30:28
|
LL | static POOL: Task<F> = Task::new();
| ^^^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error: concrete type differs from previous defining opaque type use
--> $DIR/layout-error.rs:31:24
|
LL | Task::spawn(&POOL, || cb());
| ^^^^^^^ expected `[type error]`, got `impl Future`
|
note: previous use here
--> $DIR/layout-error.rs:30:5
|
LL | static POOL: Task<F> = Task::new();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 4 previous errors
Some errors have detailed explanations: E0425, E0658. Some errors have detailed explanations: E0425, E0658.
For more information about an error, try `rustc --explain E0425`. For more information about an error, try `rustc --explain E0425`.

View File

@ -5,9 +5,8 @@
// revisions: min_tait full_tait // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait)] #![feature(min_type_alias_impl_trait)]
#![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
//[full_tait]~| WARN incomplete
use std::future::Future; use std::future::Future;
pub struct Task<F: Future>(F); pub struct Task<F: Future>(F);
@ -27,7 +26,6 @@ async fn cb() {
type F = impl Future; type F = impl Future;
// Check that statics are inhabited computes they layout. // Check that statics are inhabited computes they layout.
static POOL: Task<F> = Task::new(); //[min_tait]~ ERROR not permitted here static POOL: Task<F> = Task::new();
Task::spawn(&POOL, || cb()); //[min_tait]~ ERROR type alias impl trait is not permitted here Task::spawn(&POOL, || cb()); //[min_tait]~ ERROR type alias impl trait is not permitted here
//[min_tait]~^ ERROR concrete type differs from previous
} }

View File

@ -1,25 +1,17 @@
warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/metadata-sufficient-for-layout.rs:10:32 --> $DIR/metadata-sufficient-for-layout.rs:10:32
| |
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
| |
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/metadata-sufficient-for-layout.rs:10:55
|
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error: fatal error triggered by #[rustc_error] error: fatal error triggered by #[rustc_error]
--> $DIR/metadata-sufficient-for-layout.rs:29:1 --> $DIR/metadata-sufficient-for-layout.rs:28:1
| |
LL | fn main() {} LL | fn main() {}
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error; 2 warnings emitted error: aborting due to previous error; 1 warning emitted

View File

@ -1,24 +1,8 @@
error[E0658]: type alias impl trait is not permitted here error: fatal error triggered by #[rustc_error]
--> $DIR/metadata-sufficient-for-layout.rs:22:23 --> $DIR/metadata-sufficient-for-layout.rs:28:1
| |
LL | static A: Option<F> = None; LL | fn main() {}
| ^^^^ | ^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error: concrete type differs from previous defining opaque type use error: aborting due to previous error
--> $DIR/metadata-sufficient-for-layout.rs:25:1
|
LL | fn f() -> F { metadata_sufficient_for_layout::g() }
| ^^^^^^^^^^^ expected `[type error]`, got `impl Generator`
|
note: previous use here
--> $DIR/metadata-sufficient-for-layout.rs:22:1
|
LL | static A: Option<F> = None;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0658`.

View File

@ -7,9 +7,8 @@
// revisions: min_tait full_tait // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait, rustc_attrs)] #![feature(min_type_alias_impl_trait, rustc_attrs)]
#![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
//[full_tait]~| WARN incomplete
#![feature(generator_trait)] #![feature(generator_trait)]
extern crate metadata_sufficient_for_layout; extern crate metadata_sufficient_for_layout;
@ -20,10 +19,10 @@
// Static queries the layout of the generator. // Static queries the layout of the generator.
static A: Option<F> = None; static A: Option<F> = None;
//[min_tait]~^ ERROR not permitted here
fn f() -> F { metadata_sufficient_for_layout::g() } fn f() -> F {
//[min_tait]~^ ERROR concrete type differs metadata_sufficient_for_layout::g()
}
#[rustc_error] #[rustc_error]
fn main() {} //[full_tait]~ ERROR fn main() {} //~ ERROR

View File

@ -1,15 +1,14 @@
// edition:2018 // edition:2018
#![feature(impl_trait_in_bindings)]
//~^ WARNING the feature `impl_trait_in_bindings` is incomplete
// See issue 60414 // See issue 60414
// Reduction to `impl Trait` // Reduction to `impl Trait`
struct Foo<T>(T); struct Foo<T>(T);
trait FooLike { type Output; } trait FooLike {
type Output;
}
impl<T> FooLike for Foo<T> { impl<T> FooLike for Foo<T> {
type Output = T; type Output = T;
@ -23,7 +22,7 @@ trait Trait {
} }
/// `T::Assoc` can't be normalized any further here. /// `T::Assoc` can't be normalized any further here.
fn foo_fail<T: Trait>() -> impl FooLike<Output=T::Assoc> { fn foo_fail<T: Trait>() -> impl FooLike<Output = T::Assoc> {
//~^ ERROR: type mismatch //~^ ERROR: type mismatch
Foo(()) Foo(())
} }
@ -39,9 +38,9 @@ trait Trait<'a> {
} }
/// Missing bound constraining `Assoc`, `T::Assoc` can't be normalized further. /// Missing bound constraining `Assoc`, `T::Assoc` can't be normalized further.
fn foo2_fail<'a, T: Trait<'a>>() -> impl FooLike<Output=T::Assoc> { fn foo2_fail<'a, T: Trait<'a>>() -> impl FooLike<Output = T::Assoc> {
//~^ ERROR: type mismatch //~^ ERROR: type mismatch
//~^^ ERROR `impl Trait` return type cannot contain a projection or `Self` that references lifetimes from a parent scope //~^^ ERROR `impl Trait` return type cannot contain a projection or `Self` that references lifetimes from a parent scope
Foo(()) Foo(())
} }
} }

View File

@ -1,45 +1,36 @@
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/bound-normalization-fail.rs:3:12
|
LL | #![feature(impl_trait_in_bindings)]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error[E0271]: type mismatch resolving `<Foo<()> as FooLike>::Output == <T as impl_trait::Trait>::Assoc` error[E0271]: type mismatch resolving `<Foo<()> as FooLike>::Output == <T as impl_trait::Trait>::Assoc`
--> $DIR/bound-normalization-fail.rs:26:32 --> $DIR/bound-normalization-fail.rs:25:32
| |
LL | fn foo_fail<T: Trait>() -> impl FooLike<Output=T::Assoc> { LL | fn foo_fail<T: Trait>() -> impl FooLike<Output = T::Assoc> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected associated type, found `()` | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected associated type, found `()`
| |
= note: expected associated type `<T as impl_trait::Trait>::Assoc` = note: expected associated type `<T as impl_trait::Trait>::Assoc`
found type `()` found type `()`
help: consider constraining the associated type `<T as impl_trait::Trait>::Assoc` to `()` help: consider constraining the associated type `<T as impl_trait::Trait>::Assoc` to `()`
| |
LL | fn foo_fail<T: Trait<Assoc = ()>>() -> impl FooLike<Output=T::Assoc> { LL | fn foo_fail<T: Trait<Assoc = ()>>() -> impl FooLike<Output = T::Assoc> {
| ^^^^^^^^^^^^ | ^^^^^^^^^^^^
error[E0760]: `impl Trait` return type cannot contain a projection or `Self` that references lifetimes from a parent scope error[E0760]: `impl Trait` return type cannot contain a projection or `Self` that references lifetimes from a parent scope
--> $DIR/bound-normalization-fail.rs:42:41 --> $DIR/bound-normalization-fail.rs:41:41
| |
LL | fn foo2_fail<'a, T: Trait<'a>>() -> impl FooLike<Output=T::Assoc> { LL | fn foo2_fail<'a, T: Trait<'a>>() -> impl FooLike<Output = T::Assoc> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0271]: type mismatch resolving `<Foo<()> as FooLike>::Output == <T as lifetimes::Trait<'static>>::Assoc` error[E0271]: type mismatch resolving `<Foo<()> as FooLike>::Output == <T as lifetimes::Trait<'static>>::Assoc`
--> $DIR/bound-normalization-fail.rs:42:41 --> $DIR/bound-normalization-fail.rs:41:41
| |
LL | fn foo2_fail<'a, T: Trait<'a>>() -> impl FooLike<Output=T::Assoc> { LL | fn foo2_fail<'a, T: Trait<'a>>() -> impl FooLike<Output = T::Assoc> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected associated type, found `()` | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected associated type, found `()`
| |
= note: expected associated type `<T as lifetimes::Trait<'static>>::Assoc` = note: expected associated type `<T as lifetimes::Trait<'static>>::Assoc`
found type `()` found type `()`
help: consider constraining the associated type `<T as lifetimes::Trait<'static>>::Assoc` to `()` help: consider constraining the associated type `<T as lifetimes::Trait<'static>>::Assoc` to `()`
| |
LL | fn foo2_fail<'a, T: Trait<'a, Assoc = ()>>() -> impl FooLike<Output=T::Assoc> { LL | fn foo2_fail<'a, T: Trait<'a, Assoc = ()>>() -> impl FooLike<Output = T::Assoc> {
| ^^^^^^^^^^^^ | ^^^^^^^^^^^^
error: aborting due to 3 previous errors; 1 warning emitted error: aborting due to 3 previous errors
Some errors have detailed explanations: E0271, E0760. Some errors have detailed explanations: E0271, E0760.
For more information about an error, try `rustc --explain E0271`. For more information about an error, try `rustc --explain E0271`.

View File

@ -1,11 +0,0 @@
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/bound-normalization-pass.rs:8:12
|
LL | #![feature(impl_trait_in_bindings)]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
warning: 1 warning emitted

View File

@ -5,8 +5,6 @@
//-^ To make this the regression test for #75962. //-^ To make this the regression test for #75962.
#![feature(min_type_alias_impl_trait)] #![feature(min_type_alias_impl_trait)]
#![feature(impl_trait_in_bindings)]
//~^ WARNING the feature `impl_trait_in_bindings` is incomplete
// See issue 60414 // See issue 60414

View File

@ -1,11 +0,0 @@
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/bound-normalization-pass.rs:8:12
|
LL | #![feature(impl_trait_in_bindings)]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
warning: 1 warning emitted

View File

@ -1,5 +1,5 @@
error[E0271]: type mismatch resolving `<Bar as Iterator>::Item == Box<(dyn for<'r> Fn(&'r (dyn ToString + 'r)) -> Option<String> + 'static)>` error[E0271]: type mismatch resolving `<Bar as Iterator>::Item == Box<(dyn for<'r> Fn(&'r (dyn ToString + 'r)) -> Option<String> + 'static)>`
--> $DIR/issue-70877.rs:11:12 --> $DIR/issue-70877.rs:10:12
| |
LL | type FooRet = impl std::fmt::Debug; LL | type FooRet = impl std::fmt::Debug;
| -------------------- the found opaque type | -------------------- the found opaque type

View File

@ -1,5 +1,5 @@
error[E0271]: type mismatch resolving `<Bar as Iterator>::Item == Box<(dyn for<'r> Fn(&'r (dyn ToString + 'r)) -> Option<String> + 'static)>` error[E0271]: type mismatch resolving `<Bar as Iterator>::Item == Box<(dyn for<'r> Fn(&'r (dyn ToString + 'r)) -> Option<String> + 'static)>`
--> $DIR/issue-70877.rs:11:12 --> $DIR/issue-70877.rs:10:12
| |
LL | type FooRet = impl std::fmt::Debug; LL | type FooRet = impl std::fmt::Debug;
| -------------------- the found opaque type | -------------------- the found opaque type

View File

@ -1,7 +1,6 @@
// revisions: min_tait full_tait // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait)] #![feature(min_type_alias_impl_trait)]
#![cfg_attr(full_tait, feature(type_alias_impl_trait))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
#![feature(impl_trait_in_bindings)]
#![allow(incomplete_features)] #![allow(incomplete_features)]
type FooArg<'a> = &'a dyn ToString; type FooArg<'a> = &'a dyn ToString;

View File

@ -7,33 +7,26 @@ LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes error[E0308]: mismatched types
--> $DIR/issue-78722.rs:7:12 --> $DIR/issue-78722.rs:15:20
| |
LL | #![feature(impl_trait_in_bindings)] LL | type F = impl core::future::Future<Output = u8>;
| ^^^^^^^^^^^^^^^^^^^^^^ | -------------------------------------- the expected opaque type
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error[E0658]: `async` blocks are not allowed in constants
--> $DIR/issue-78722.rs:17:20
|
LL | let f: F = async { 1 };
| ^^^^^^^^^^^
|
= note: see issue #85368 <https://github.com/rust-lang/rust/issues/85368> for more information
= help: add `#![feature(const_async_blocks)]` to the crate attributes to enable
error[E0493]: destructors cannot be evaluated at compile-time
--> $DIR/issue-78722.rs:17:13
|
LL | let f: F = async { 1 };
| ^ constants cannot evaluate destructors
... ...
LL | }], LL | let f: F = async { 1 };
| - value is dropped here | - ^^^^^^^^^^^ expected opaque type, found a different opaque type
| |
| expected due to this
|
::: $SRC_DIR/core/src/future/mod.rs:LL:COL
|
LL | pub const fn from_generator<T>(gen: T) -> impl Future<Output = T::Return>
| ------------------------------- the found opaque type
|
= note: expected opaque type `impl Future` (opaque type at <$DIR/issue-78722.rs:8:10>)
found opaque type `impl Future` (opaque type at <$SRC_DIR/core/src/future/mod.rs:LL:COL>)
= note: distinct uses of `impl Trait` result in different opaque types
error: aborting due to 2 previous errors; 2 warnings emitted error: aborting due to previous error; 1 warning emitted
Some errors have detailed explanations: E0493, E0658. For more information about this error, try `rustc --explain E0308`.
For more information about an error, try `rustc --explain E0493`.

View File

@ -1,31 +1,23 @@
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes error[E0308]: mismatched types
--> $DIR/issue-78722.rs:7:12 --> $DIR/issue-78722.rs:15:20
| |
LL | #![feature(impl_trait_in_bindings)] LL | type F = impl core::future::Future<Output = u8>;
| ^^^^^^^^^^^^^^^^^^^^^^ | -------------------------------------- the expected opaque type
|
= note: `#[warn(incomplete_features)]` on by default
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error[E0658]: `async` blocks are not allowed in constants
--> $DIR/issue-78722.rs:17:20
|
LL | let f: F = async { 1 };
| ^^^^^^^^^^^
|
= note: see issue #85368 <https://github.com/rust-lang/rust/issues/85368> for more information
= help: add `#![feature(const_async_blocks)]` to the crate attributes to enable
error[E0493]: destructors cannot be evaluated at compile-time
--> $DIR/issue-78722.rs:17:13
|
LL | let f: F = async { 1 };
| ^ constants cannot evaluate destructors
... ...
LL | }], LL | let f: F = async { 1 };
| - value is dropped here | - ^^^^^^^^^^^ expected opaque type, found a different opaque type
| |
| expected due to this
|
::: $SRC_DIR/core/src/future/mod.rs:LL:COL
|
LL | pub const fn from_generator<T>(gen: T) -> impl Future<Output = T::Return>
| ------------------------------- the found opaque type
|
= note: expected opaque type `impl Future` (opaque type at <$DIR/issue-78722.rs:8:10>)
found opaque type `impl Future` (opaque type at <$SRC_DIR/core/src/future/mod.rs:LL:COL>)
= note: distinct uses of `impl Trait` result in different opaque types
error: aborting due to 2 previous errors; 1 warning emitted error: aborting due to previous error
Some errors have detailed explanations: E0493, E0658. For more information about this error, try `rustc --explain E0308`.
For more information about an error, try `rustc --explain E0493`.

View File

@ -4,8 +4,6 @@
#![feature(min_type_alias_impl_trait)] #![feature(min_type_alias_impl_trait)]
#![cfg_attr(full_tait, feature(type_alias_impl_trait))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
#![feature(impl_trait_in_bindings)]
//~^ WARN the feature `impl_trait_in_bindings` is incomplete
type F = impl core::future::Future<Output = u8>; type F = impl core::future::Future<Output = u8>;
@ -15,8 +13,7 @@ fn concrete_use() -> F {
async {} async {}
} }
let f: F = async { 1 }; let f: F = async { 1 };
//~^ ERROR `async` blocks are not allowed in constants //~^ ERROR mismatched types [E0308]
//~| ERROR destructors cannot be evaluated at compile-time
1 1
}], }],
} }

View File

@ -282,8 +282,6 @@ error[E0562]: `impl Trait` not allowed outside of function and inherent method r
| |
LL | let _in_local_variable: impl Fn() = || {}; LL | let _in_local_variable: impl Fn() = || {};
| ^^^^^^^^^ | ^^^^^^^^^
|
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error[E0562]: `impl Trait` not allowed outside of function and inherent method return types error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
--> $DIR/where-allowed.rs:248:46 --> $DIR/where-allowed.rs:248:46

View File

@ -7,15 +7,11 @@ LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
error[E0658]: type alias impl trait is not permitted here error: fatal error triggered by #[rustc_error]
--> $DIR/issue-75053.rs:52:15 --> $DIR/issue-75053.rs:49:1
| |
LL | let _pos: Phantom1<DummyT<()>> = Scope::new().my_index(); LL | fn main() {
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error: aborting due to previous error; 1 warning emitted error: aborting due to previous error; 1 warning emitted
For more information about this error, try `rustc --explain E0658`.

View File

@ -1,24 +1,11 @@
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes error[E0557]: feature has been removed
--> $DIR/issue-75053.rs:7:34 --> $DIR/issue-75053.rs:7:34
| |
LL | #![cfg_attr(in_bindings, feature(impl_trait_in_bindings))] LL | #![cfg_attr(in_bindings, feature(impl_trait_in_bindings))]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^ feature has been removed
| |
= note: `#[warn(incomplete_features)]` on by default = note: removed due to being incomplete and unstable
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error[E0282]: type annotations needed error: aborting due to previous error
--> $DIR/issue-75053.rs:52:38
|
LL | type O;
| ------- `<Self as MyIndex<T>>::O` defined here
...
LL | let _pos: Phantom1<DummyT<()>> = Scope::new().my_index();
| ^^^^^^^^^^-------------
| |
| this method call resolves to `<Self as MyIndex<T>>::O`
| cannot infer type for type parameter `T`
error: aborting due to previous error; 1 warning emitted For more information about this error, try `rustc --explain E0557`.
For more information about this error, try `rustc --explain E0282`.

View File

@ -1,12 +1,8 @@
error[E0658]: type alias impl trait is not permitted here error: fatal error triggered by #[rustc_error]
--> $DIR/issue-75053.rs:52:15 --> $DIR/issue-75053.rs:49:1
| |
LL | let _pos: Phantom1<DummyT<()>> = Scope::new().my_index(); LL | fn main() {
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error: aborting due to previous error error: aborting due to previous error
For more information about this error, try `rustc --explain E0658`.

View File

@ -1,11 +1,9 @@
// compile-flags: -Z mir-opt-level=3 // compile-flags: -Z mir-opt-level=3
// revisions: min_tait full_tait in_bindings // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait, rustc_attrs)] #![feature(min_type_alias_impl_trait, rustc_attrs)]
#![cfg_attr(full_tait, feature(type_alias_impl_trait))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
#![cfg_attr(in_bindings, feature(impl_trait_in_bindings))]
//[in_bindings]~^ WARN incomplete
use std::marker::PhantomData; use std::marker::PhantomData;
@ -49,7 +47,6 @@ fn my_index(self) -> Self::O {
#[rustc_error] #[rustc_error]
fn main() { fn main() {
//~^ ERROR
let _pos: Phantom1<DummyT<()>> = Scope::new().my_index(); let _pos: Phantom1<DummyT<()>> = Scope::new().my_index();
//[min_tait,full_tait]~^ ERROR not permitted here
//[in_bindings]~^^ ERROR type annotations needed
} }

View File

@ -1,18 +1,10 @@
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/issue-53096.rs:4:32 --> $DIR/issue-53096.rs:4:32
| |
LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))] LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
| |
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/issue-53096.rs:4:56
|
LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
error: fatal error triggered by #[rustc_error] error: fatal error triggered by #[rustc_error]
@ -21,5 +13,5 @@ error: fatal error triggered by #[rustc_error]
LL | fn main() {} LL | fn main() {}
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error; 2 warnings emitted error: aborting due to previous error; 1 warning emitted

View File

@ -1,12 +1,8 @@
error[E0658]: type alias impl trait is not permitted here error: fatal error triggered by #[rustc_error]
--> $DIR/issue-53096.rs:10:19 --> $DIR/issue-53096.rs:14:1
| |
LL | const BAZR: Foo = bar(); LL | fn main() {}
| ^^^^^ | ^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error: aborting due to previous error error: aborting due to previous error
For more information about this error, try `rustc --explain E0658`.

View File

@ -1,14 +1,14 @@
#![feature(const_impl_trait, const_fn_fn_ptr_basics, rustc_attrs)] #![feature(const_impl_trait, const_fn_fn_ptr_basics, rustc_attrs)]
// revisions: min_tait full_tait // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait)] #![feature(min_type_alias_impl_trait)]
#![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
//[full_tait]~| WARN incomplete
type Foo = impl Fn() -> usize; type Foo = impl Fn() -> usize;
const fn bar() -> Foo { || 0usize } const fn bar() -> Foo {
|| 0usize
}
const BAZR: Foo = bar(); const BAZR: Foo = bar();
//[min_tait]~^ ERROR not permitted here
#[rustc_error] #[rustc_error]
fn main() {} //[full_tait]~ ERROR fn main() {} //~ ERROR

View File

@ -1,25 +1,17 @@
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/issue-53678-generator-and-const-fn.rs:4:32 --> $DIR/issue-53678-generator-and-const-fn.rs:4:32
| |
LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))] LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
| |
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/issue-53678-generator-and-const-fn.rs:4:56
|
LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
error: fatal error triggered by #[rustc_error] error: fatal error triggered by #[rustc_error]
--> $DIR/issue-53678-generator-and-const-fn.rs:23:1 --> $DIR/issue-53678-generator-and-const-fn.rs:22:1
| |
LL | fn main() {} LL | fn main() {}
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error; 2 warnings emitted error: aborting due to previous error; 1 warning emitted

View File

@ -1,12 +1,8 @@
error[E0658]: type alias impl trait is not permitted here error: fatal error triggered by #[rustc_error]
--> $DIR/issue-53678-generator-and-const-fn.rs:20:36 --> $DIR/issue-53678-generator-and-const-fn.rs:22:1
| |
LL | const FOO: GenOnce<usize, usize> = const_generator(10, 100); LL | fn main() {}
| ^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error: aborting due to previous error error: aborting due to previous error
For more information about this error, try `rustc --explain E0658`.

View File

@ -1,9 +1,8 @@
#![feature(const_impl_trait, generators, generator_trait, rustc_attrs)] #![feature(const_impl_trait, generators, generator_trait, rustc_attrs)]
// revisions: min_tait full_tait // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait)] #![feature(min_type_alias_impl_trait)]
#![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
//[full_tait]~| WARN incomplete
use std::ops::Generator; use std::ops::Generator;
@ -17,7 +16,7 @@ const fn const_generator<Y, R>(yielding: Y, returning: R) -> GenOnce<Y, R> {
} }
} }
const FOO: GenOnce<usize, usize> = const_generator(10, 100); //[min_tait]~ ERROR not permitted here const FOO: GenOnce<usize, usize> = const_generator(10, 100);
#[rustc_error] #[rustc_error]
fn main() {} //[full_tait]~ ERROR fn main() {} //~ ERROR

View File

@ -8,13 +8,13 @@ LL | type Item = impl Bug;
= help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable
error[E0658]: type alias impl trait is not permitted here error[E0658]: type alias impl trait is not permitted here
--> $DIR/issue-60371.rs:14:37 --> $DIR/issue-60371.rs:14:40
| |
LL | const FUN: fn() -> Self::Item = || (); LL | const FUN: fn() -> Self::Item = || ();
| ^^^^^ | ^
| |
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable
error[E0277]: the trait bound `(): Bug` is not satisfied error[E0277]: the trait bound `(): Bug` is not satisfied
--> $DIR/issue-60371.rs:10:17 --> $DIR/issue-60371.rs:10:17

View File

@ -1,25 +1,17 @@
warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/issue-60407.rs:3:32 --> $DIR/issue-60407.rs:3:32
| |
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
| |
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/issue-60407.rs:3:55
|
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error: fatal error triggered by #[rustc_error] error: fatal error triggered by #[rustc_error]
--> $DIR/issue-60407.rs:12:1 --> $DIR/issue-60407.rs:11:1
| |
LL | fn main() { LL | fn main() {
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error; 2 warnings emitted error: aborting due to previous error; 1 warning emitted

View File

@ -1,24 +1,8 @@
error[E0658]: type alias impl trait is not permitted here error: fatal error triggered by #[rustc_error]
--> $DIR/issue-60407.rs:9:39 --> $DIR/issue-60407.rs:11:1
| |
LL | static mut TEST: Option<Debuggable> = None; LL | fn main() {
| ^^^^ | ^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error: concrete type differs from previous defining opaque type use error: aborting due to previous error
--> $DIR/issue-60407.rs:16:1
|
LL | fn foo() -> Debuggable {
| ^^^^^^^^^^^^^^^^^^^^^^ expected `[type error]`, got `u32`
|
note: previous use here
--> $DIR/issue-60407.rs:9:1
|
LL | static mut TEST: Option<Debuggable> = None;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0658`.

View File

@ -1,18 +1,18 @@
// revisions: min_tait full_tait // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait, rustc_attrs)] #![feature(min_type_alias_impl_trait, rustc_attrs)]
#![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
//[full_tait]~| WARN incomplete
type Debuggable = impl core::fmt::Debug; type Debuggable = impl core::fmt::Debug;
static mut TEST: Option<Debuggable> = None; //[min_tait]~ ERROR not permitted here static mut TEST: Option<Debuggable> = None;
#[rustc_error] #[rustc_error]
fn main() { //[full_tait]~ ERROR fn main() {
//~^ ERROR
unsafe { TEST = Some(foo()) } unsafe { TEST = Some(foo()) }
} }
fn foo() -> Debuggable { //[min_tait]~ ERROR concrete type differs fn foo() -> Debuggable {
0u32 0u32
} }

View File

@ -1,25 +1,17 @@
warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:5:32 --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:5:32
| |
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
| |
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:5:55
|
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error: fatal error triggered by #[rustc_error] error: fatal error triggered by #[rustc_error]
--> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:19:1 --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:18:1
| |
LL | fn main() { LL | fn main() {
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error; 2 warnings emitted error: aborting due to previous error; 1 warning emitted

View File

@ -2,9 +2,8 @@
// revisions: min_tait full_tait // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait, rustc_attrs)] #![feature(min_type_alias_impl_trait, rustc_attrs)]
#![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
//[full_tait]~| WARN incomplete
type T = impl Sized; type T = impl Sized;
// The concrete type referred by impl-trait-type-alias(`T`) is guaranteed // The concrete type referred by impl-trait-type-alias(`T`) is guaranteed
@ -16,7 +15,8 @@
fn take(_: fn() -> T) {} fn take(_: fn() -> T) {}
#[rustc_error] #[rustc_error]
fn main() { //[full_tait]~ ERROR fatal error triggered by #[rustc_error] fn main() {
//[full_tait]~^ ERROR fatal error triggered by #[rustc_error]
take(|| {}); take(|| {});
//[min_tait]~^ ERROR not permitted here //[min_tait]~^ ERROR not permitted here
take(|| {}); take(|| {});

View File

@ -1,25 +1,17 @@
warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/no_inferrable_concrete_type.rs:6:32 --> $DIR/no_inferrable_concrete_type.rs:6:32
| |
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
| |
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/no_inferrable_concrete_type.rs:6:55
|
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error: could not find defining uses error: could not find defining uses
--> $DIR/no_inferrable_concrete_type.rs:10:12 --> $DIR/no_inferrable_concrete_type.rs:9:12
| |
LL | type Foo = impl Copy; LL | type Foo = impl Copy;
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error; 2 warnings emitted error: aborting due to previous error; 1 warning emitted

View File

@ -1,18 +1,8 @@
error[E0658]: type alias impl trait is not permitted here
--> $DIR/no_inferrable_concrete_type.rs:16:12
|
LL | let _: Foo = std::mem::transmute(0u8);
| ^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error: could not find defining uses error: could not find defining uses
--> $DIR/no_inferrable_concrete_type.rs:10:12 --> $DIR/no_inferrable_concrete_type.rs:9:12
| |
LL | type Foo = impl Copy; LL | type Foo = impl Copy;
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to 2 previous errors error: aborting due to previous error
For more information about this error, try `rustc --explain E0658`.

View File

@ -3,15 +3,16 @@
// revisions: min_tait full_tait // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait)] #![feature(min_type_alias_impl_trait)]
#![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
//[full_tait]~| WARN incomplete
type Foo = impl Copy; //~ could not find defining uses type Foo = impl Copy; //~ could not find defining uses
// make compiler happy about using 'Foo' // make compiler happy about using 'Foo'
fn bar(x: Foo) -> Foo { x } fn bar(x: Foo) -> Foo {
x
}
fn main() { fn main() {
let _: Foo = std::mem::transmute(0u8); //[min_tait]~ ERROR not permitted here let _: Foo = std::mem::transmute(0u8);
} }

View File

@ -1,25 +1,17 @@
warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/structural-match-no-leak.rs:4:32 --> $DIR/structural-match-no-leak.rs:4:32
| |
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
| |
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/structural-match-no-leak.rs:4:55
|
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error: `impl Send` cannot be used in patterns error: `impl Send` cannot be used in patterns
--> $DIR/structural-match-no-leak.rs:19:9 --> $DIR/structural-match-no-leak.rs:18:9
| |
LL | LEAK_FREE => (), LL | LEAK_FREE => (),
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error; 2 warnings emitted error: aborting due to previous error; 1 warning emitted

View File

@ -1,12 +1,8 @@
error[E0658]: type alias impl trait is not permitted here error: `impl Send` cannot be used in patterns
--> $DIR/structural-match-no-leak.rs:15:24 --> $DIR/structural-match-no-leak.rs:18:9
| |
LL | const LEAK_FREE: Bar = leak_free(); LL | LEAK_FREE => (),
| ^^^^^^^^^^^ | ^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error: aborting due to previous error error: aborting due to previous error
For more information about this error, try `rustc --explain E0658`.

View File

@ -1,9 +1,8 @@
#![feature(const_impl_trait)] #![feature(const_impl_trait)]
// revisions: min_tait full_tait // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait)] #![feature(min_type_alias_impl_trait)]
#![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
//[full_tait]~| WARN incomplete
type Bar = impl Send; type Bar = impl Send;
@ -12,12 +11,12 @@
const fn leak_free() -> Bar { const fn leak_free() -> Bar {
7i32 7i32
} }
const LEAK_FREE: Bar = leak_free(); //[min_tait]~ ERROR not permitted here const LEAK_FREE: Bar = leak_free();
fn leak_free_test() { fn leak_free_test() {
match todo!() { match todo!() {
LEAK_FREE => (), LEAK_FREE => (),
//[full_tait]~^ `impl Send` cannot be used in patterns //~^ `impl Send` cannot be used in patterns
_ => (), _ => (),
} }
} }

View File

@ -1,25 +1,17 @@
warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/structural-match.rs:4:32 --> $DIR/structural-match.rs:4:32
| |
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
| |
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/structural-match.rs:4:55
|
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))]
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
error: `impl Send` cannot be used in patterns error: `impl Send` cannot be used in patterns
--> $DIR/structural-match.rs:20:9 --> $DIR/structural-match.rs:19:9
| |
LL | VALUE => (), LL | VALUE => (),
| ^^^^^ | ^^^^^
error: aborting due to previous error; 2 warnings emitted error: aborting due to previous error; 1 warning emitted

View File

@ -1,12 +1,8 @@
error[E0658]: type alias impl trait is not permitted here error: `impl Send` cannot be used in patterns
--> $DIR/structural-match.rs:16:20 --> $DIR/structural-match.rs:19:9
| |
LL | const VALUE: Foo = value(); LL | VALUE => (),
| ^^^^^^^ | ^^^^^
|
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information
= help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable
error: aborting due to previous error error: aborting due to previous error
For more information about this error, try `rustc --explain E0658`.

View File

@ -1,9 +1,8 @@
#![feature(const_impl_trait)] #![feature(const_impl_trait)]
// revisions: min_tait full_tait // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait)] #![feature(min_type_alias_impl_trait)]
#![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
//[full_tait]~| WARN incomplete
type Foo = impl Send; type Foo = impl Send;
@ -13,12 +12,12 @@
const fn value() -> Foo { const fn value() -> Foo {
A A
} }
const VALUE: Foo = value(); //[min_tait]~ ERROR not permitted here const VALUE: Foo = value();
fn test() { fn test() {
match todo!() { match todo!() {
VALUE => (), VALUE => (),
//[full_tait]~^ `impl Send` cannot be used in patterns //~^ `impl Send` cannot be used in patterns
_ => (), _ => (),
} }
} }

View File

@ -1,5 +1,5 @@
warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/type-alias-impl-trait-const.rs:5:32 --> $DIR/type-alias-impl-trait-const.rs:3:32
| |
LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
@ -7,13 +7,24 @@ LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
= note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes error[E0308]: mismatched types
--> $DIR/type-alias-impl-trait-const.rs:11:12 --> $DIR/type-alias-impl-trait-const.rs:13:19
| |
LL | #![feature(impl_trait_in_bindings)] LL | pub type Foo = impl Debug;
| ^^^^^^^^^^^^^^^^^^^^^^ | ---------- the expected opaque type
...
LL | const _FOO: Foo = 5;
| ^ expected opaque type, found integer
| |
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information = note: expected opaque type `impl Debug`
found type `{integer}`
warning: 2 warnings emitted error: could not find defining uses
--> $DIR/type-alias-impl-trait-const.rs:10:16
|
LL | pub type Foo = impl Debug;
| ^^^^^^^^^^
error: aborting due to 2 previous errors; 1 warning emitted
For more information about this error, try `rustc --explain E0308`.

View File

@ -1,11 +1,21 @@
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes error[E0308]: mismatched types
--> $DIR/type-alias-impl-trait-const.rs:11:12 --> $DIR/type-alias-impl-trait-const.rs:13:19
| |
LL | #![feature(impl_trait_in_bindings)] LL | pub type Foo = impl Debug;
| ^^^^^^^^^^^^^^^^^^^^^^ | ---------- the expected opaque type
...
LL | const _FOO: Foo = 5;
| ^ expected opaque type, found integer
| |
= note: `#[warn(incomplete_features)]` on by default = note: expected opaque type `impl Debug`
= note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information found type `{integer}`
warning: 1 warning emitted error: could not find defining uses
--> $DIR/type-alias-impl-trait-const.rs:10:16
|
LL | pub type Foo = impl Debug;
| ^^^^^^^^^^
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0308`.

View File

@ -1,23 +1,16 @@
// check-pass
// revisions: min_tait full_tait // revisions: min_tait full_tait
#![feature(min_type_alias_impl_trait)] #![feature(min_type_alias_impl_trait)]
#![cfg_attr(full_tait, feature(type_alias_impl_trait))] #![cfg_attr(full_tait, feature(type_alias_impl_trait))]
//[full_tait]~^ WARN incomplete //[full_tait]~^ WARN incomplete
// Currently, the `type_alias_impl_trait` feature implicitly
// depends on `impl_trait_in_bindings` in order to work properly.
// Specifically, this line requires `impl_trait_in_bindings` to be enabled:
// https://github.com/rust-lang/rust/blob/481068a707679257e2a738b40987246e0420e787/compiler/rustc_typeck/check/mod.rs#L856
#![feature(impl_trait_in_bindings)]
//~^ WARN the feature `impl_trait_in_bindings` is incomplete
// Ensures that `const` items can constrain an opaque `impl Trait`. // Ensures that `const` items can constrain an opaque `impl Trait`.
use std::fmt::Debug; use std::fmt::Debug;
pub type Foo = impl Debug; pub type Foo = impl Debug;
//~^ ERROR could not find defining uses
const _FOO: Foo = 5; const _FOO: Foo = 5;
//~^ ERROR mismatched types [E0308]
fn main() { fn main() {}
}